DOM4J的背景
Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来后而独立开发的。Dom4J使用接口和抽象基类,虽然Dom4J的API相对要复杂一些,但是它提供了比JDOM更好的灵活性。
1. Dom4J的jar包介绍
Dom4J属于第三方插件,我们在下载完之后,将其解压如下:
名称 | 作用 |
---|---|
docs | 存放的是dom4j的文档 |
lib | 存放的是跟dom4j相关的jar包 |
src | 存放源码 |
xml | 存放的是一些配置文件 |
2. 导入JAR包
因为dom4J是属于第三方插件,所以要使用dom4J,我们必须将其jar包导入到lib目录下。找到dom4j-1.6.1.jar(1.6.1是版本号),放进Wroot – WEB INF – lib下。
3. DOM4J查询操作
DOM4J查找节点的文本内容,需要一层一层去查找内容,通过根节点去查找子节点,再查找子节点的子节点。
//创建解析器:new SAXReader()
SAXReader reader = new SAXReader();
//解析XML,返回Document对象:read(File file);
Document document = reader.read("src/book.xml");
//获取根节点:getRootElement();
Element root = document.getRootElement();
//获取根节点的子节点:root.elements(标签名)
List<Elemtnt> first = root.elements("XXX");//XXX是节点的名字(String类型)
//返回List集合,可以遍历集合或者getIndex()获取Element对象
//获取文本 getText()
4. DOM4J在末尾添加子节点
添加子节点是在查询的基础上进行的。
先看下xml中没有改变的内容是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名>javaweb开发大全</书名>
<作者>班长</作者>
<售价>99.8元</售价>
<简介>这是不错啊</简介>
</书>
<书>
<书名>葵花宝典</书名>
<作者>岳不群</作者>
<售价>99.8两</售价>
<简介>欲练此功...</简介>
</书>
</书架>
下面是在末尾添加子节点的代码:
//获取解析器
SAXReader reader = new SAXReader();
//解析XML,返回Document对象
Document document = reader.read("src/book2.xml");
//获取根节点
Element root = document.getRootElement();
//获取第二本书
Element book2 = (Element) root.elements("书").get(1);
//直接在第二本书下添加子节点,设置文本内容
book2.addElement("猫").setText("这TM是猫?");
//回写
FileOutputStream fos = new FileOutputStream("src/book2.xml");//创建流
XMLWriter writer = new XMLWriter(fos); //回写类
writer.write(document); //回写文档对象
writer.close(); //关闭流
执行后的结果为:
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名>javaweb开发大全</书名>
<作者>班长</作者>
<售价>99.8元</售价>
<简介>这是不错啊</简介>
</书>
<书>
<书名>葵花宝典</书名>
<作者>岳不群</作者>
<售价>99.8两</售价>
<简介>欲练此功...</简介>
<猫>这TM是猫?</猫></书>
</书架>
但是格式有点乱,我们可以通过设置来搞定:
//设置格式
OutputFormat Peopleformat = OutputFormat.createPrettyPrint();//适用于人看
OutputFormat PCformat = OutputFormat.createPrettyPrint();//适用于电脑
//设置编码集,也可以不设置,默认编码集为"UTF-8"
Peopleformat.setEncoding("GBK");
//然后在原本回写类的后面添加一个参数format,就是上面的设置的格式
XMLWriter writer = new XMLWriter(fos,format); //回写类
5. 在指定位置添加子节点
//获取解析对对象
SAXReader reader = new SAXReader();
//解析XML
Document document = reader.read("src/book2.xml");
//获取根节点
Element root = document.getRootElement();
//获取第二本书节点
Element book = (Element) root.elements("书").get(1);
//获取第二本书下的所有子节点,返回List集合
List<Element> list = book.elements();
//创建元素对象,DocumentHelper.createrElement("狗");
Element dog = DocumentHelper.createElement("狗");
//给这个节点设置文本内容
dog.setText("马萨卡!!是狗???");
//在指定的位置上进行添加,前面一个参数是索引
list.add(1,dog);
//回写
回写的具体代码可以参照上面 在节点末尾添加子节点代码中的回写。
6. 移除和修改子节点
和上面代码一样,获取到 第二本书的节点
//获取书的节点
//获取猫节点
Element cat = book.element("猫");
//修改节点内容
cat.setText("猫和老鼠");
//移除猫的节点
book.remove(cat);
//回写
和上面一样,进行回写