一、简介
在上篇文章中,我们介绍了 SAX 解析技术!
经过整理,通过 Java 程序解析 XML 文件,目前比较主流的有以下四种方式:
- DOM 解析
- SAX 解析
- JDOM 解析
- DOM4J 解析
本篇介绍第三种解析技术:JDOM 解析!
二、JDOM 解析
JDOM 是 Java 生态中一个非常优秀的 XML 开源文档解析库,你可以把它看成是 DOM 及 SAX 的结合版,同时在设计上弥补了 DOM 及 SAX 在实际应用当中的不足之处。
优点如下:
- 1.基于树的模型处理 XML 文件,数据会加载在内存中
- 2.没有向下兼容的限制,因此比 DOM 简单
- 3.速度快,缺陷少
- 4.具有 SAX 的解析特征
- 5.API 比 DOM 更容易理解
当然也有缺点:
- 1.能处理大于内存的 XML 文档
- 2.不支持与 DOM 中相应遍历包
总体来讲,JDOM 对于大多数需要使用 XML 应用程序来说还是非常实用的。
下面我们以如下的 XML 文件为例,介绍解析的实现过程。
<?xml version="1.0" encoding="utf-8" ?>
<class>
<student id="1">
<name>张三</name>
<gender>男</gender>
<age>26</age>
</student>
<student id="2">
<name>里斯</name>
<gender>男</gender>
<age>36</age>
</student>
<student id="3">
<name>王五</name>
<gender>女</gender>
<age>24</age>
</student>
</class>
JDOM 实现过程如下:
<!--jdom -->
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.1.3</version>
</dependency>
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import java.io.InputStream;
import java.util.List;
public class JdomDemo {
public static void main(String[] args) throws Exception {
// 1.获取xml文件流
InputStream inputStream = JdomDemo.class.getClassLoader().getResourceAsStream("demo.xml");
// 2.创建SAXBuilder对象
SAXBuilder saxBuilder = new SAXBuilder();
// 3.将输入流加载到build中
Document document = saxBuilder.build(inputStream);
// 4.获取根节点
Element rootElement = document.getRootElement();
// 5.获取子节点
List<Element> children = rootElement.getChildren();
for (Element child : children) {
List<Attribute> attributes = child.getAttributes();
// 遍历标签属性
for (Attribute attr : attributes) {
System.out.println(attr.getName()+":"+attr.getValue());
}
// 遍历标签子节点
List<Element> childrenList = child.getChildren();
for (Element o: childrenList) {
System.out.println(o.getName() + ":" + o.getValue());
}
System.out.println("==============");
}
}
}
运行结果如下:
id:1
name:张三
gender:男
age:26
==============
id:2
name:里斯
gender:男
age:36
==============
id:3
name:王五
gender:女
age:24
==============
三、小结
最后总结一下,JDOM 是 Java 生态中一个非常优秀的 XML 开源文档解析库,你可以把它看成是 DOM 及 SAX 的结合版,同时在设计上弥补了 DOM 及 SAX 在实际应用当中的不足之处。
写到最后
不会有人刷到这里还想白嫖吧?点赞对我真的非常重要!在线求赞。加个关注我会非常感激!