前言:
什么是DOM解析
DOM解析原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。
可以看一下图片了解一下:(图片来自于黑马)
个人理解的单个DOM图:
标签节点和文本内容是同一层级别的,而属性节点不是。
XML解析工具
DOM解析原理:
1)JAXP (oracle-Sun公司官方)
2)JDOM工具(非官方)
3)Dom4J工具(非官方)
三大框架(默认读取xml的工具就是Dom4j)
.......
SAX解析原理:
1)Sax解析工具(oracle-sun公司官方)
这里只介绍Dom4j工具
Dom4j工具(原理:DOM解析,非官方,不在JDK需要导包)
现在最好用解析器
所以 我也学的是这一个
下载:先去官网下载核心jar包:dom4j-2.1.0.jar
dom4j
导包操作:
1. 右击项目new–>Folder 创建一个lib文件夹(其实什么名字无所谓啦,不过lib是库文件夹 这样起名字比较好理解)
2. 然后将 dom4j-2.1.0.jar拖入创建的lib文件夹中
3. 右击dom4j核心包 右击–>Build Path–>Add to Build path 将添加进来的核心包导入到项目中 项目中显示如下内容即可。
获取document对象:
为什么要获取document对象呢,因为我们是通过这个对象来获取 ,修改 xml文件中的元素
第一个Dom4j读取xml文档的例子:
也许有人对 . 这个符号不是很理解,意思就是当前文件的目录 ,具体可以参考这篇中间提到的部分
IO流学习笔记–操作文件
public static void main(String[] args) {
try {
//1.创建一个xml解析器对象
SAXReader saxReader=new SAXReader();
//2.读取xml文档,返回Document对象
Document document=(Document) saxReader.read(new File(".\\src\\day13\\contains.xml"));
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//包装成RuntimeException类型错误抛出
throw new RuntimeException(e);
}
}
注意:头文件是这几个 尤其是dom4j下面的包 别导错了 不然报错
import java.io.File;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
题外话:
如果你想try一整块 代码 ,有快速try的 就是选中你要的代码块 右击 Surround With –>Try catch 即可
Domj4读取xml文件:
读取xml文件的操作 我没与放在main函数里 而是通过单元测试来操作的。
具体的想了解测试单元的 可以看单元测试–JUnit4了解一下(eclipse环境)
设置xml文件内容:src包下
<?xml version="1.0" encoding="utf-8"?>
<constrant id="12">
sdf
<const id="11">
我是const1
<name>
我是name1
</name>
</con