使用dom4j工具包实现对xml文件的增删改查,xml文件为:
<?xml version="1.0" encoding="gb2312"?>
<书架>
<书>
<书名 name="the daught of sea">海的女儿</书名>
<作者>安徒生</作者>
<售价>50.0元</售价>
</书>
<书>
<书名>卖火柴的小女孩</书名>
<作者>安徒生</作者>
<售价>28.0元</售价>
</书>
</书架>
实现代码为:
package com.java.dom;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
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 DomParse {
@Test
public void find() throws DocumentException {
//创建读取器
SAXReader reader = new SAXReader();
//将读取的结果放在document中
Document doc = reader.read(new File("src/books.xml"));
//得到根节点
Element root = doc.getRootElement();
Element book = (Element) root.elements("书").get(0);
String value = book.element("书名").attributeValue("name");
System.out.println(value);
}
@Test
public void add() throws DocumentException, IOException {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/books.xml"));
Element root = doc.getRootElement();
Element book = (Element) root.elements("书").get(0);
book.addElement("售价").setText("39.0元");
//创建一个漂亮的输出器
OutputFormat format = OutputFormat.createPrettyPrint();
//设置输出器的码表
format.setEncoding("gb2312");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/books.xml"),format);
//将更改的xml文件写回
writer.write(doc);
}
@Test
public void delete() throws DocumentException, IOException {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/books.xml"));
Element root = doc.getRootElement();
Element book = (Element) root.elements("书").get(1);
Element price = (Element) book.elements("售价").get(0);
book.remove(price);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/books.xml"),format);
writer.write(doc);
}
@Test
public void modify() throws DocumentException, IOException {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/books.xml"));
Element root = doc.getRootElement();
Element book = (Element) root.elements("书").get(0);
Element price = (Element) book.elements("作者").get(0);
price.setText("Hello");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/books.xml"),format);
writer.write(doc);
}
}
运行结果为:
<?xml version="1.0" encoding="gb2312"?>
<书架>
<书>
<书名 name="the daught of sea">海的女儿</书名>
<作者>Hello</作者>
<售价>50.0元</售价>
<售价>39.0元</售价>
</书>
<书>
<书名>卖火柴的小女孩</书名>
<作者>安徒生</作者>
</书>
</书架>
乱码问题通过OutputFormat类来解决,根据xml文件中使用的码表,设置输出器的码表,而且XM4LWrite中的参数第一个为字节输出,也可使用可更改码表的字符输出。