XML被设计用来结构化、存储以及传输数据。在项目中使用广泛,那么如何解析XML文件呢?DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,让我们一块来看使用Dom4j解析XML的一个实例:
1、jar包引入
本实例用到了dom4j-1.6.1.jar的包
2、XML文件结构
<?xml version="1.0" encoding="UTF-8"?>
<university>
<college category="211">
<name>海南大学</name>
<short>海大</short>
<startTime>1958</startTime>
<address>美兰区</address>
</college>
<college category="985">
<name>清华大学</name>
<short>清华</short>
<startTime>1911</startTime>
<address>海淀区</address>
</college>
</university>
3、java代码
public class xmlParse {
public static void main(String[] args) {
Document doc; //创建Document对象
String file = "src/xml/test.xml"; //文件路径
File XMLfile = new File(file);
// File XMLfile = new File(xmlParse.class.getClassLoader().getResource(file).getFile());
SAXReader reader = new SAXReader(); //创建SAXReader对象
try {
doc = reader.read(XMLfile); //获取Document对象
Element root = doc.getRootElement();
System.out.println(root.getName());
for(Iterator<?> i = root.elementIterator("college"); i.hasNext();){
Element cont = (Element) i.next();
System.out.println("类别:"+cont.attributeValue("category"));
System.out.println("学校名称:"+cont.elementText("name"));
System.out.println("简称:"+cont.elementText("short"));
System.out.println("创办时间:"+cont.elementText("startTime"));
System.out.println("地址:"+cont.elementText("address")+"\r\n");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
以上就是使用Dom4j解析XML的过程。
其他几种解析XML文件的方式总结:
1、DOM方式
DOM全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。DOM方式为 XML 文档的解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。
优点:随机访问;支持删除、修改、重新排列等多种功能
缺点:当文档比较大或者结构比较复杂时,对内存的需求比较高
使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足
2、SAX方式
SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。SAX解析采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。
优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码少
缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素
使用场合:只需XML文档的少量内容,很少回头访问;机器内存少
3、JDOM生成和解析XML
为减少DOM、SAX的编码量,出现了JDOM,它简化与XML的交互并且比使用DOM实现更快。JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM自身不包含解析器。它通常使用SAX解析器来解析和验证输入XML文档。它包含一些转换器以将JDOM表示输出成SAX事件流、DOM模型或XML文本文档。
优点:极大减少了代码量
使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用了SAX、DOM文档