不废话了,开始主题吧。
原来的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名>JavaWeb开发</书名>
<作者>于何</作者>
<售价>89.00元</售价>
</书>
<书>
<书名>Spring框架详解</书名>
<作者>徐良</作者>
<售价>55.00元</售价>
</书>
</书架>
package cn.test.xml;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.testng.annotations.Test;
import cn.test.utils.xmlUtils;
//增删改查
public class XMLDemo {
public static final String FILE_PATH="./conf/bookinfo.xml";
@Test
public void xmlFind() {
//获取第二本书的售价
//1. 加载文档,获取Document
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read("./conf/bookinfo.xml");
//2. 获得根节点
Element rootElement = document.getRootElement();
//3.获取第二本书
Element bookElement = (Element) rootElement.elements("书").get(1);
//4. 获取第二本书的售价
String price = bookElement.element("售价").getText();
System.out.println("第二本书的售价为:"+price);
}
catch (DocumentException e) {
e.printStackTrace();
}
}
@Test
//为第一本书增加出版社信息
public void xmlAdd() throws DocumentException, IOException {
//1. 获得Document对象
Document document = xmlUtils.getDocument(FILE_PATH);
//2. 获得根节点
Element rootElement = document.getRootElement();
// 3.获得第一本书(由于要获得第一本,所以直接使用rootElement.element()来获取该元素)
Element bookElement = rootElement.element("书");
System.out.println(bookElement.element("书名").getText());
/*
// 4. 要添加节点,首先要创建一个节点
Element publisherElement = DocumentHelper.createElement("出版社");
// 5. 为该节点添加文本
publisherElement.addText("邮电出版社");
// 6. 将刚创建出来的节点加到书下
bookelement.add(publisherElement);
*/
//可以使用一种更为简洁的方式
bookElement.addElement("出版社")
.addAttribute("经销商", "全国新华书店")
.addAttribute("开本", "185X260")
.addText("邮电出版社");
// 7.将document写入文件
/*OutputFormat format = OutputFormat.createPrettyPrint();
Writer writer = new OutputStreamWriter(new FileOutputStream(FILE_PATH),"UTF-8");
XMLWriter xWriter = new XMLWriter(writer, format);
xWriter.write(document);
xWriter.close();*/
xmlUtils.document2XML(document, FILE_PATH);
}
@Test
//添加属性节点
public static void xmlAddAttribute() throws DocumentException, IOException {
//获取Document对象
Document document = xmlUtils.getDocument(FILE_PATH);
//获得根节点
Element rootElement = document.getRootElement();
//获得第二本书
Element bookElement = (Element) rootElement.elements().get(1);
//为第二本书的书名添加属性值
bookElement.element("书名").addAttribute("ISBN", "12365874588");
//写入文件
xmlUtils.document2XML(document, FILE_PATH);
}
//修改第二本书的作者
@Test
public static void xmlUpdate() throws DocumentException, IOException {
//获取Document对象
Document document = xmlUtils.getDocument(FILE_PATH);
//获得根节点
Element rootElement = document.getRootElement();
//获得第二本书的作者
Element authorElement = ((Element)rootElement.elements("书").get(1)).element("作者");
//修改作者
authorElement.setText("普度");
//写入文件
xmlUtils.document2XML(document, FILE_PATH);
}
@Test
//修改第二本书的ISBN
public static void xmlUpdateAttribute() throws DocumentException, IOException {
//获取Document对象
Document document = xmlUtils.getDocument(FILE_PATH);
//获得根节点
Element rootElement = document.getRootElement();
//获得第二本书的书名
Element bookNameEelement = ((Element)rootElement.elements("书").get(1)).element("书名");
bookNameEelement.addAttribute("ISBN", "888999-123654");
//写入文件
xmlUtils.document2XML(document, FILE_PATH);
}
@Test
//删除第二本书的ISBN
public static void xmlRemoveAttribute() throws DocumentException, IOException {
//获取Document对象
Document document = xmlUtils.getDocument(FILE_PATH);
//获得根节点
Element rootElement = document.getRootElement();
//获得第二本书的书名
Element bookNameEelement = ((Element)rootElement.elements("书").get(1)).element("书名");
//addAttribute()用法,当没有该属性时,可以为其添加,
//当有该属性时,可以替换原来的值,当设置值为null时,可以删除该属性
bookNameEelement.addAttribute("ISBN", null);
//写入文件
xmlUtils.document2XML(document, FILE_PATH);
}
@Test
//删除节点
public static void xmlRemoveNode() throws DocumentException, IOException {
//获取Document对象
Document document = xmlUtils.getDocument(FILE_PATH);
//获得根节点
Element rootElement = document.getRootElement();
//获得第一本书的售价节点
Element priceElement = rootElement.element("书").element("售价");
//获得父节点并删除自己
priceElement.getParent().remove(priceElement);
//写入文件
xmlUtils.document2XML(document, FILE_PATH);
}
}
工具类
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class xmlUtils
{
//工具类通常都将构造方法私有
private xmlUtils() {}
public static Document getDocument(String filePath) throws DocumentException {
SAXReader reader = new SAXReader();
return reader.read(filePath);
}
public static void document2XML(Document document, String filePath) throws IOException {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
//Writer writer = new OutputStreamWriter(new FileOutputStream(filePath),"UTF-8");
XMLWriter xWriter = new XMLWriter(new FileOutputStream(filePath), format);
xWriter.write(document);
xWriter.close();
}
}
最后的运行结果
xmlFind()的运行结果:
第二本书的售价为:55.00元
PASSED: xmlFind
------------------------------------
xmlAdd()的运行结果
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名>JavaWeb开发</书名>
<作者>于何</作者>
<售价>89.00元</售价>
<出版社 经销商="全国新华书店" 开本="185X260">邮电出版社</出版社>
</书>
<书>
<书名>Spring框架详解</书名>
<作者>徐良</作者>
<售价>55.00元</售价>
</书>
</书架>
------------------------------------
xmlAddAttribute ()的运行结果:
添加了属性节点
<书>
<书名 ISBN="12365874588">Spring框架详解</书名>
<作者>徐良</作者>
<售价>55.00元</售价>
</书>
------------------------------------
xmlUpdate ()的运行结果:
将作者修改为普度
<书>
<书名 ISBN="12365874588">Spring框架详解</书名>
<作者>普度</作者>
<售价>55.00元</售价>
</书>
------------------------------------
xmlUpdateAttribute ()的运行结果:
修改属性节点
<书>
<书名 ISBN="888999-123654">Spring框架详解</书名>
<作者>普度</作者>
<售价>55.00元</售价>
</书>
------------------------------------
xmlRemoveAttribute ()的运行结果:
删除属性节点
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名>JavaWeb开发</书名>
<作者>于何</作者>
<售价>89.00元</售价>
<出版社 经销商="全国新华书店" 开本="185X260">邮电出版社</出版社>
</书>
<书>
<书名>Spring框架详解</书名>
<作者>普度</作者>
<售价>55.00元</售价>
</书>
</书架>
------------------------------------
xmlRemoveNode ()的运行结果:
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名>JavaWeb开发</书名>
<作者>于何</作者>
<出版社 经销商="全国新华书店" 开本="185X260">邮电出版社</出版社>
</书>
<书>
<书名>Spring框架详解</书名>
<作者>普度</作者>
<售价>55.00元</售价>
</书>
</书架>