DOM4J
优点:简单,易用,逻辑条理清晰,使用范围较广
缺点:dom4j的解析前都将文件加载到内存中,所以读的快写得慢,如果XML文件过大,不推荐使用dom4j的
(一)通过递归获取所有节点元素
XML文件如下
<?xml version="1.0" encoding="UTF-8"?>
<Users class="1">
<user>
<id>1</id>
<name>Tom</name>
<age>21</age>
</user>
<user>
<id>2</id>
<name>Jerry</name>
<age>23</age>
</user>
<user>
<id>3</id>
<name>Chana</name>
<age>18</age>
</user>
</Users>
dom4j的代码如下
package java1805springdemo;
import java.io.File;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
*
* <p>Title: Dom4j.java</p>
* <p>Description:
* </p>
* <p>Copyright: XJ-Fate (c) 2018</p>
* @author XJ
* @date 2018年8月30日
* @version 1.0
*/
public class Dom4j {
public static void parserNode(Element ele){
System.out.println(ele.getName()+":"+ele.getText().trim());
@SuppressWarnings("unchecked")
List<Attribute> attrList = ele.attributes();
for(Attribute attr : attrList){
//每循环一次,获取当前节点的属性及值
String name = attr.getName();
String value = attr.getValue();
System.out.println(name+"="+value);
}
@SuppressWarnings("unchecked")
List<Element> eleList = ele.elements();
//递归遍历父节点下的所有子节点
for(Element e : eleList){
parserNode(e);
}
}
public static void main(String[] args) {
SAXReader saxReader = new SAXReader();
try {
//取得XML文档对象
Document document = saxReader.read(new File("./src/test/java/ElementNode.xml"));
//取得根标签
Element ele = document.getRootElement();
parserNode(ele);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果如下
Users:
class=1
user:
id:1
name:Tom
age:21
user:
id:2
name:Jerry
age:23
user:
id:3
name:Chana
age:18