用Dom4j来解析XML文件
Posted pw-fight
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Dom4j来解析XML文件相关的知识,希望对你有一定的参考价值。
Dom4j jar包地址:https://pan.baidu.com/s/1eNExExlFHIecfW_6YkXpvw 提取码:w5om
首先解压Dom4j jar包,解压后如下
然后把 dom4j-1.6.1.jar 复制放到工程目录下(集成开发工具是myeclipse)
在myeclipse工程下直接右键dom4j-1.6.1.jar,点击Build Path → Add to Build Path
myeclipse自动导入jar包,然后就可以使用jar包提供的接口了。
我们创建一个book.xml文件放到src目录下
book.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书 >
<书名>时间简史</书名>
<作者>霍金</作者>
<售价>60</售价>
</书>
<书>
<书名>广义相对论</书名>
<作者>爱因斯坦</作者>
<售价>65</售价>
</书>
</书架>
Dom4j_parseXML.java编写解析代码
需要导入的包:
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
注意:除了FileOutputStream和List不是dom4j包的,其他的都是
创建解析器
//创建dom4j解析器
SAXReader reader = new SAXReader();
//加载document对象
Document document = reader.read("src/book.xml");
得到某个节点的内容
//拿到根节点
Element root = document.getRootElement();
//拿到所有的书节点
List<Element> list = root.elements("书");
//拿到第二本书
Element bookE1 = list.get(1);
//获取售价文本
System.out.println(bookE1.elementText("售价"));
遍历所有元素节点
public static void ergodic(Document document) {
treeWalk( document.getRootElement() );
}
public static void treeWalk(Element element) {
for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
Node node = element.node(i);
if ( node instanceof Element ) {
System.out.println(node.getName());
treeWalk( (Element) node );
}
}
}
修改某个元素节点的主体内容
//获取根节点
Element root = document.getRootElement();
//拿到第二种书节点
Element bookEL = (Element) root.elements("书").get(1);
//拿到售价节点
Element priceE1 = bookEL.element("售价");
//改变主体内容
priceE1.setText("55");
//将结果保存到硬盘上
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();
向指定元素节点中添加子元素节点
//获取根节点
Element root = document.getRootElement();
//拿到第一种书节点
Element bookEL = (Element) root.elements("书").get(0);
//拿到售价节点
Element priceE1 = bookEL.element("售价");
//添加子节点
priceE1.addElement("内部价").setText("50");
//将结果保存到硬盘上
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();
向指定元素节点上增加同级元素节点
//获取根节点
Element root = document.getRootElement();
//拿到第一种书节点
Element bookEL = (Element) root.elements("书").get(0);
//给书节点添加子节点
bookEL.addElement("批发价").setText("30");
//将结果保存到硬盘上
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();
删除指定的元素节点
Element root = document.getRootElement();
Element bookEL = (Element) root.elements("书").get(0);
Element insideprice = bookEL.element("售价").element("内部价");
//删除
insideprice.getParent().remove(insideprice);
//将结果保存到硬盘上
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();
操作文件的属性
//获取根节点
Element root = document.getRootElement();
//拿到第一种书节点
Element bookEL = (Element) root.elements("书").get(0);
//增加一个属性
bookEL.addAttribute("类", "科普");
//将结果保存到硬盘上
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();
以上就是用dom4j来解析XML文件的几种方式
以上是关于用Dom4j来解析XML文件的主要内容,如果未能解决你的问题,请参考以下文章