dom4j解析XML之【增删改查】

时间:2022-10-21 00:20:07

一、待解析的XML

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>Java就业培训教程123</书名>
<特价>9.99</特价>
<作者>小张</作者>
<售价>39.00元</售价>
</书>
<书>
<书名>JavaScript网页开发</书名>
<作者>小祥</作者>
<售价>11</售价>
</书>
</书架></span>

二、解析程序

本人使用 dom4j-1.6.1.jar 配合单元测试进行解析测试

<span style="font-size:14px;">package com.teng.dom4j;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class Demo2 {

//查询
@Test
public void find() throws Exception{

//1、创建解析器
SAXReader reader = new SAXReader();

//2、读取文档
Document doc = reader.read("book.xml");

//3、获取文档的根节点
Element root = doc.getRootElement();

//4、获取第一个书名节点的值
String name = root.element("书").element("书名").getText();

//System.out.println(name);

//5、遍历所有的<书>节点的<书名>节点
List<Element> eleList = root.elements("书");
for(Element ele : eleList){
String names = ele.element("书名").getText();
System.out.println(names);
}
}

//增加
@Test
public void add() throws Exception{
//1、创建解析器
SAXReader reader = new SAXReader();

//2、读取文档
Document doc = reader.read("book.xml");

//3、获取文档的根节点
Element root = doc.getRootElement();

//4、创建一个新节点
Element newEle = DocumentHelper.createElement("特价");
newEle.setText("9.99");

//5、将新节点,添加到相应父节点下
root.element("书").add(newEle);

//6、更新XML文件
//方式一:利用Node接口提供的write方法
/*Writer writer = new OutputStreamWriter(new FileOutputStream("book.xml"),"gb2312");
doc.write(writer);
writer.close();*/

//方式二:XMLWriter进行输出
OutputFormat format = OutputFormat.createCompactFormat();//输出化格式器
format.setEncoding("utf-8");
XMLWriter writer =new XMLWriter(new FileOutputStream("book.xml"),format);
writer.write(doc);
writer.close();
}

//在指定位置添加节点
@Test
public void add2() throws Exception{
//1、创建解析器
SAXReader reader = new SAXReader();

//2、读取文档
Document doc = reader.read("book.xml");

//3、获取文档的根节点
Element root = doc.getRootElement();

//4、创建一个新节点
Element newEle = DocumentHelper.createElement("特价");
newEle.setText("9.99");

//获取节点的List集合,并在第2个位置添加
List eles = root.element("书").elements();//获取<书>节点下的List集合
eles.add(1, newEle);

//XMLWriter进行输出
OutputFormat format = OutputFormat.createCompactFormat();//输出化格式器
format.setEncoding("utf-8");
XMLWriter writer =new XMLWriter(new FileOutputStream("book.xml"),format);
writer.write(doc);
writer.close();
}

//更新
@Test
public void update() throws Exception{
//1、创建解析器
SAXReader reader = new SAXReader();

//2、读取文档
Document doc = reader.read("book.xml");

//3、获取文档的根节点
Element root = doc.getRootElement();

//4、获取特价节点
Element priceEle = root.element("书").element("特价");
priceEle.setText("7.7元");

//XMLWriter进行输出
OutputFormat format = OutputFormat.createCompactFormat();//输出化格式器
format.setEncoding("utf-8");
XMLWriter writer =new XMLWriter(new FileOutputStream("book.xml"),format);
writer.write(doc);
writer.close();

}

//删除
@Test
public void delete() throws Exception{
//1、创建解析器
SAXReader reader = new SAXReader();

//2、读取文档
Document doc = reader.read("book.xml");

//3、获取文档的根节点
Element root = doc.getRootElement();

//选取要删除的节点
Element priceEle = root.element("书").element("特价");

//获取该节点的父节点,并调用其remove()方法
priceEle.getParent().remove(priceEle);

//XMLWriter进行输出
OutputFormat format = OutputFormat.createCompactFormat();//输出化格式器
format.setEncoding("utf-8");
XMLWriter writer =new XMLWriter(new FileOutputStream("book.xml"),format);
writer.write(doc);
writer.close();

}


}</span>