解析xml文件——dom4j
2018-01-15 16:46
323 查看
继解析xml文件——简介,在xml文件的4种解析方式中,在不考虑大型文档的前提下DOM4J方式性能最佳,也最容易实现。
xml文件:
以上述xml文件为例,用DOM4J方式对其解析,并将解析结果保存到自定义的数据结构中。
需要下载dom4j.jar!!!!!
代码实例:
1. 定义数据结构
2.解析xml文件
3.main方法
4. 运行结果:
5. 总结:
1). 在方法
2). 方法
如果属性不多,可以通过
3). 基于2),如果属性很多,且要获取全部属性值,可以通过
xml文件:
<?xml version="1.0" encoding="utf-8" ?> <root att1="测试" att2="解析xml"> <child att1="a" att2="你"> <subChild att1="b" att2="好"> <node att1="c" att2="2">text1</node> <node att1="d" att2="0">text2</node> </subChild> </child> <child att1="e" att2="1"> <subChild att1="f" att2="8"></subChild> </child> </root>
以上述xml文件为例,用DOM4J方式对其解析,并将解析结果保存到自定义的数据结构中。
需要下载dom4j.jar!!!!!
代码实例:
1. 定义数据结构
/* 定义数据结构,保存解析的xml文件信息 */ public class XmlFile { private String att1; //元素属性att1 private String att2; //元素属性att2 private String elementText; //元素文本 public String getAtt1() { return att1; } public void setAtt1(String att1) { this.att1 = att1; } public String getAtt2() { < bf82 span class="hljs-keyword">return att2; } public void setAtt2(String att2) { this.att2 = att2; } public String getElementText() { return elementText; } public void setElementText(String elementText) { this.elementText = elementText; } }
2.解析xml文件
/* xmlReadFunction:获取文件路径,调用readNodeFunction函数,返回解析内容 输入:文件路径 返回:文件信息,ArrayList<XmlFile> readNodeFunction: 递归方法,遍历每个xml元素节点,调用readNode函数,返回解析内容 输入:元素,文件信息,ArrayList<XmlFile> 返回:void readNode:解析元素节点的属性值和文本内容 输入:元素,文件信息,ArrayList<XmlFile> 返回:void */ import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class XmlRead { public ArrayList<XmlFile> xmlReadFunction(String path){ if(path==null || path.length()==0){ System.out.println("请输入文件路径"); return null; } ArrayList<XmlFile> infoList = new ArrayList<>(); //用于存储解析得到的xml信息 File file = new File(path); //读取文件,创建file对象 SAXReader reader = new SAXReader(); //创建一个SAXReader对象 try { Document document = reader.read(file); //创建一个Document对象 Element root = document.getRootElement(); //通过Document对象获取根元素节点 readNodeFunction(root, infoList); //遍历xml元素节点,解析 } catch (DocumentException e) { e.printStackTrace(); } return infoList; } public void readNodeFunction(Element root, ArrayList<XmlFile> infoList){ if (root != null){ readNode(root, infoList); //先解析当前元素节点 //迭代当前元素节点的子节点 for(Iterator i = root.elementIterator(); i.hasNext();) { Element e = (Element) i.next(); readNode(e, infoList); List<Element> listElement = e.elements(); for(Element ele:listElement){ readNodeFunction(ele, infoList); //递归 } } } } public void readNode(Element node, ArrayList<XmlFile> infoList){ if(node != null){ String text = node.getText(); //获取元素节点的文本内容 String att1 = node.attributeValue("att1"); //获取元素节点的属性值att1 String att2 = node.attributeValue("att2"); //获取元素节点的属性值att2 //保存到XmlFile对象中 XmlFile info = new XmlFile(); if(text!=null && !"".equals(text.trim())){ info.setElementText(text); } if (att1 != null && !"".equals(att1)){ info.setAtt1(att1); } if (att2 != null && !"".equals(att2)){ info.setAtt2(att2); } infoList.add(info); } } }
3.main方法
import java.util.ArrayList; public class Main { public static void main(String[] args) { System.out.println("---------read Xml dom4j--------"); XmlRead read = new XmlRead(); ArrayList<XmlFile> infoList = reader.xmlReadFunction("E:\\xmlTest\\new 1.xml"); for (XmlFile info: infoList){ System.out.println("文本: "+info.getElementText() +", att1: "+info.getAtt1() +", att2: "+info.getAtt2()); } } }
4. 运行结果:
---------read Xml dom4j-------- 文本: null, att1: 测试, att2: 解析xml 文本: null, att1: a, att2: 你 文本: null, att1: b, att2: 好 文本: text1, att1: c, att2: 2 文本: text2, att1: d, att2: 0 文本: null, att1: e, att2: 1 文本: null, att1: f, att2: 8
5. 总结:
1). 在方法
readNodeFunction中,需要先对当前元素节点调用
readNode方法,否则会漏掉元素,然后获取当前元素节点的子元素,递归。
2). 方法
readNode主要用于获取元素节点的属性或者文本内容:
如果属性不多,可以通过
elementNode.attributeValue("属性名")获取指定的属性值,如上所示;
elementNode.getText()可以获得元素节点的文本内容,由于该xml文件有的元素节点无文本,所以打印结果会有null。
3). 基于2),如果属性很多,且要获取全部属性值,可以通过
List<Attribute> attList = elementNode.attributes();获取元素的属性列表,然后遍历该list即可。
相关文章推荐
- dom4j 解析 xml 文件(一)
- Java进阶(二十七)使用Dom4j解析XML文件
- Java dom4j解析RESTFull风格发布的WebService的xml文件
- java基础-使用dom4j解析XML文件
- dom4j解析xml文件
- DOM4J 解析XML文件
- Java进阶(二十七)使用Dom4j解析XML文件
- dom4j基于事件流解析大XML的文件
- 采用Dom4j及xpath解析xml文件
- Jdom和Dom4J解析xml文件
- jdom (dom4j)解析xml出错、校验dtd文件不生效
- java 利用dom4j 解析XML文件
- dom4j解析xml文件
- 关于Dom4j解析XML文件,外带上一个简单工具
- java通过dom4j解析xml文件
- dom4j解析XML文件
- [置顶] 【XML】使用dom4j来解析XML文件数据
- dom4j 解析 xml 文件(二)
- dom4j解析xml文件
- Dom4j解析带有命名空间的XML文件