版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljk126wy/article/details/82862194
为了尽可能的阅读官网文档 百度dom4j ,说是在sourceForge 可以找到。特意访问https://sourceforge.net/projects/dom4j/ 网址进行查看 发现该项目已经迁移至github: https://github.com/dom4j/dom4j
github上有一个介绍的地址:https://dom4j.github.io 里面介绍如下使用dom4j
我们这里介绍dom4j-1.6.1 的版本
1 创建mavne项目 引入dom4j需要的依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
2 在resource目录下创建 book.xml
<?xml version="1.0" encoding="UTF-8"?>
<books desc="this is a exam">
<book name="java从入门到放弃" press="NO1">
<author sex="man" age="18">tom</author>
<describe>Don't give up</describe>
</book>
<book name="mysql从入门到放弃" press="NO1">
<author sex="man" age="18">tom</author>
<describe>Don't give up</describe>
</book>
<book name="python从入门到放弃" press="NO2">
<author sex="woman" age="20">jerry</author>
<describe>Don't give up</describe>
</book>
<book name="php从入门到放弃" press="NO2">
<author sex="woman" age="20">jerry</author>
<describe>Don't give up</describe>
</book>
</books>
解析XMl
package cn.lijunkui.exam;
import java.io.InputStream;
import java.net.URL;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import junit.framework.Assert;
public class ExamShow {
@Test
public void getDocument() throws DocumentException {
//通过URL获取解析
URL resource = ExamShow.class.getClassLoader().getResource("book.xml");
SAXReader reader = new SAXReader();
Document document = reader.read(resource);
String asXML = document.asXML();
Assert.assertTrue( !"".equals(asXML));
//通过输入流解析
InputStream resourceAsStream = ExamShow.class.getClassLoader().getResourceAsStream("book.xml");
SAXReader reader2 = new SAXReader();
Document document2 = reader.read(resourceAsStream);
String asXML2 = document2.asXML();
Assert.assertTrue( !"".equals(asXML2));
//通过磁盘路径进行解析
SAXReader reader3 = new SAXReader();
Document document3 = reader.read("D:/workspace-sts-3.9.5.RELEASE/parsexmllearn/target/classes/book.xml");
String asXML3 = document3.asXML();
Assert.assertTrue( !"".equals(asXML3));
}
}
查询操作
elementIterator
@Test
public void elementIterator() {
System.out.println("----------------------------------------------------");
Element rootElement = document.getRootElement();
//遍历根几点下的节点内容
for (Iterator<Element> it = rootElement.elementIterator(); it.hasNext();) {
Element bookelement = it.next();
Attribute nameAttribute = bookelement.attribute("name");
Attribute pressAttribute = bookelement.attribute("press");
System.out.println("书的名称:"+nameAttribute.getValue());
System.out.println("书的出版社:"+pressAttribute.getValue());
System.out.println();
for (Iterator<Element> bookChildit = bookelement.elementIterator(); bookChildit.hasNext();) {
Element bookChildElement = bookChildit.next();
if("author".equals(bookChildElement.getName())) {
Attribute sexAttribute = bookChildElement.attribute("sex");
Attribute ageAttribute = bookChildElement.attribute("age");
String authorName = bookChildElement.getText();
System.out.println("作者的名称:"+authorName);
System.out.println("作者的性别:"+sexAttribute.getValue());
System.out.println("作者的年龄:"+ageAttribute.getValue());
}else {
String describe = bookChildElement.getText();
}
}
}
System.out.println("----------------------------------------------------");
//指定节点名称进行便利 根节点下的子节点
for (Iterator<Element> it = rootElement.elementIterator("book"); it.hasNext();) {
Element bookelement = it.next();
Attribute nameAttribute = bookelement.attribute("name");
Attribute pressAttribute = bookelement.attribute("press");
System.out.println("书的名称:"+nameAttribute.getValue());
System.out.println("书的出版社:"+pressAttribute.getValue());
System.out.println();
for (Iterator<Element> bookChildit = bookelement.elementIterator(); bookChildit.hasNext();) {
Element bookChildElement = bookChildit.next();
if("author".equals(bookChildElement.getName())) {
Attribute sexAttribute = bookChildElement.attribute("sex");
Attribute ageAttribute = bookChildElement.attribute("age");
String authorName = bookChildElement.getText();
System.out.println("作者的名称:"+authorName);
System.out.println("作者的性别:"+sexAttribute.getValue());
System.out.println("作者的年龄:"+ageAttribute.getValue());
}else {
String describe = bookChildElement.getText();
}
}
}
System.out.println("----------------------------------------------------");
//获取根节点所有的属性
for (Iterator<Attribute> it = rootElement.attributeIterator(); it.hasNext();) {
Attribute attribute = it.next();
System.out.println(attribute.getName()+","+attribute.getValue());
}
}
elements
@Test
public void elements() {
Element rootElement = document.getRootElement();
List<Element> elements = rootElement.elements();
for (Element bookelement : elements) {
Attribute nameAttribute = bookelement.attribute("name");
Attribute pressAttribute = bookelement.attribute("press");
System.out.println("书的名称:"+nameAttribute.getValue());
System.out.println("书的出版社:"+pressAttribute.getValue());
List<Element> bookChildEles = bookelement.elements();
for (Element bookChildEle : bookChildEles) {
if("author".equals(bookChildEle.getName())) {
Attribute sexAttribute = bookChildEle.attribute("sex");
Attribute ageAttribute = bookChildEle.attribute("age");
String authorName = bookChildEle.getText();
System.out.println("作者的名称:"+authorName);
System.out.println("作者的性别:"+sexAttribute.getValue());
System.out.println("作者的年龄:"+ageAttribute.getValue());
}else {
String describe = bookChildEle.getText();
}
}
}
}
@Test
public void elementsByName() {
Element rootElement = document.getRootElement();
List<Element> elements = rootElement.elements("book");
for (Element bookelement : elements) {
Attribute nameAttribute = bookelement.attribute("name");
Attribute pressAttribute = bookelement.attribute("press");
System.out.println("书的名称:"+nameAttribute.getValue());
System.out.println("书的出版社:"+pressAttribute.getValue());
List<Element> bookChildEles = bookelement.elements();
for (Element bookChildEle : bookChildEles) {
if("author".equals(bookChildEle.getName())) {
Attribute sexAttribute = bookChildEle.attribute("sex");
Attribute ageAttribute = bookChildEle.attribute("age");
String authorName = bookChildEle.getText();
System.out.println("作者的名称:"+authorName);
System.out.println("作者的性别:"+sexAttribute.getValue());
System.out.println("作者的年龄:"+ageAttribute.getValue());
}else {
String describe = bookChildEle.getText();
}
}
}
}
获取指定位置的元素 getText
@Test
public void getElementsByIndex() {
Element rootElement = document.getRootElement();
List<Element> elements = rootElement.elements("book");
Element bookEle = elements.get(0);
Attribute nameAttribute = bookEle.attribute("name");
Attribute pressAttribute = bookEle.attribute("press");
System.out.println("书的名称:"+nameAttribute.getValue());
System.out.println("书的出版社:"+pressAttribute.getValue());
List<Element> authorEles = bookEle.elements("author");
Element element = authorEles.get(0);
String authorName = element.getText();
System.out.println("作者名称:"+authorName);
}
dom4j 的增删改查
@Test
public void add() throws IOException {
//获取根元素的节点
Element rootElement = document.getRootElement();
//获取第一个book元素的节点
List<Element> es=rootElement.elements();
Element book=es.get(0);
//创建一个新的element名字叫version 对其进行值的添加
Element version = DocumentHelper.createElement("version");
version.setText("10");
book.add(version);
// 进行xml回写
OutputFormat forment=OutputFormat.createPrettyPrint();
forment.setEncoding("utf-8");
ClassLoader classLoader = ExamShow.class.getClassLoader();
URL resource = classLoader.getResource("book.xml");
String path = resource.getPath();
XMLWriter writer=new XMLWriter(new FileWriter(new File(path)),forment);
writer.write(rootElement);
writer.close();
}
修改
@Test
public void edit() throws IOException {
//获取根元素的节点
Element rootElement = document.getRootElement();
//获取第一个book元素的节点
List<Element> es=rootElement.elements();
Element book=es.get(0);
//创建一个新的element名字叫version 对其进行值的添加
List<Element> versions = book.elements("version");
Element version = versions.get(0);
version.addAttribute("a","c");
version.setText("第3个版本");
// 进行xml回写
OutputFormat forment=OutputFormat.createPrettyPrint();
forment.setEncoding("utf-8");
ClassLoader classLoader = ExamShow.class.getClassLoader();
URL resource = classLoader.getResource("book.xml");
String path = resource.getPath();
XMLWriter writer=new XMLWriter(new FileWriter(new File(path)),forment);
writer.write(rootElement);
writer.close();
}
删除
@Test
public void remove() throws IOException {
//获取根元素的节点
Element rootElement = document.getRootElement();
//获取第一个book元素的节点
List<Element> es=rootElement.elements();
Element book=es.get(0);
Element version = book.element("version");
book.remove(version);//通过父获取子删除子
//version.getParent().remove(version);//通过子获取父删除子
//book.remove(book.attribute("name"));//删除book的属性
// 进行xml回写
OutputFormat forment=OutputFormat.createPrettyPrint();
forment.setEncoding("utf-8");
ClassLoader classLoader = ExamShow.class.getClassLoader();
URL resource = classLoader.getResource("book.xml");
String path = resource.getPath();
XMLWriter writer=new XMLWriter(new FileWriter(new File(path)),forment);
writer.write(rootElement);
writer.close();
}
在指定位置添加指定元素
@Test
public void addIndex() throws IOException, DocumentException {
//获取根元素的节点
Element rootElement = document.getRootElement();
String addContent = " <book name=\"mysql从入门到放弃2\" press=\"NO1\"> \r\n" +
"<author sex=\"man\" age=\"182\">tom</author> \r\n" +
"<describe>Don't give up</describe> \r\n" +
"</book> ";
Document book=DocumentHelper.parseText(addContent);
rootElement.elements().add(1,book.getRootElement());
// 进行xml回写
OutputFormat forment=OutputFormat.createPrettyPrint();
forment.setEncoding("utf-8");
ClassLoader classLoader = ExamShow.class.getClassLoader();
URL resource = classLoader.getResource("book.xml");
String path = resource.getPath();
XMLWriter writer=new XMLWriter(new FileWriter(new File(path)),forment);
writer.write(rootElement);
writer.close();
}
dom4j xPath 查询
selectSingleNode 和 selectNodes
@Test
public void xPath() {
List<Element> selectNodes = document.selectNodes("//author");
for (Element element : selectNodes) {
String authorName = element.getText();
Attribute sexAttribute = element.attribute("sex");
Attribute ageAttribute = element.attribute("age");
System.out.println("老师的名称:"+authorName);
System.out.println("老师的年龄:"+sexAttribute.getValue());
System.out.println("老师的性别:"+ageAttribute.getValue());
}
}
@Test
public void xPaht2() {
Element authorEle = (Element) document.selectSingleNode("//author[@age='182']");
String authorName = authorEle.getText();
Attribute sexAttribute = authorEle.attribute("sex");
Attribute ageAttribute = authorEle.attribute("age");
System.out.println("老师的名称:"+authorName);
System.out.println("老师的年龄:"+sexAttribute.getValue());
System.out.println("老师的性别:"+ageAttribute.getValue());
}