解析xml文件目前用得最多的就是Dom4j解析器,被很多企业认可,在这之前还有w3c发布的dom解析器,但后来逐渐被弃用了,Dmo4j解析器使用起来更简单,逻辑更清晰,备受开发者喜爱。
Dom4j解析器开始解析前都将文件加载到内存中,所以就出现了“读快写慢”的现象,但并没有影响它受欢迎的程度。如果xml文件过于庞大,就要考虑使用SAX解析了,因为SAX是逐行解析,并不需要等待加载完成就可以马上解析。
使用Dom4j解析器解析xml文件前,需要下载jar包支持,这里使用Maven技术导入jar包,
创建一个java项目再转换成Maven项目,在pom.xml文件中添加如下代码:
<dependencies>
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
【java转Maven项目教程:http://blog.csdn.net/weixin_36146275/article/details/54972744】
ElementNode.xml:本文使用这种格式的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.java:此类涉及递归遍历,如果不清楚什么是递归,可以到知乎去看看【https://www.zhihu.com/question/20507130】
import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.SAXParser;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4j {
/**
* 递归遍历所有父节点、子节点
* @param ele
*/
public static void parserNode(Element ele){
System.out.println(ele.getName()+":"+ele.getText().trim());
//从Users根节点开始遍历,像【属性=值】的形式存为一个Attribute对象存储在List集合中
List<Attribute> attrList = ele.attributes();
for(Attribute attr : attrList){
//每循环一次,解析此节点的一个【属性=值】,没有则输出空
String name = attr.getName();
String value = attr.getValue();
System.out.println(name+"="+value);
}
List<Element> eleList = ele.elements();
//递归遍历父节点下的所有子节点
for(Element e : eleList){
parserNode(e);
}
}
public static void main(String[] args) {
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(new File("src/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
Dom4j解析逻辑非常清晰,核心点就在于递归思想——层层调用自身方法。