dom4j进行CRUD的操作基本上只需要分为四步骤,
1.获取解析器
2.解析XML获取代表整个文档的dom对象
3.获取根节点
4.利用根节点进行CRUD操作。
实现的代码如下:
/**
* 查找XML中的子元素
* */
@Test
public void dom4JSelect()throws Exception{
//1.获取解析器
SAXReader reader=new SAXReader();
//2.解析XML获取代表整个文档的dom对象
org.dom4j.Document document=reader.read("../MyXml.xml");
//3.获取根节点
Element root=document.getRootElement();
//4.获取需要的标签的内容,dom4j不可以跨标签执行操作,需要循序查找标签
String bookName=root.element("书").element("书名").getText();
//只执行一次,即如果有多个书名的标签它一次性只查一个
System.out.println("书名--"+bookName);
//拿到根节点以下所有的子标签
List<Element> list=root.elements();
//拿到根节点的子标签列表中的第二个标签,这里根节点是“书架”它的子节点就是“书”,
//即就是拿到第二个标签内容为“书”的标签
Element bookEl2=list.get(1);
String bookName2=bookEl2.element("书名").getText();
System.out.println("书名--"+bookName2);
}
/**
* 向XML中添加子元素
* */
@Test
public void dom4JAdd()throws Exception{
//1.获取解析器
SAXReader reader=new SAXReader();
//2.解析XML获取代表整个文档的dom对象
org.dom4j.Document document=reader.read("../MyXml.xml");
//3.获取根节点
Element root=document.getRootElement();
//创建节点,设置标签体
Element element=DocumentHelper.createElement("特价");
//给节点设置内容
element.setText("40.0元");
//获取创建的节点的父节点,即需要将新的节点挂载在哪一个节点的下面
Element bookEle=root.element("书");
//将创建的节点添加进去
bookEle.add(element);
//将内存中的dom树回写到文件中,更新文件
// FileWriter fileWriter=new FileWriter("../day01/WebRoot/Jsp/MyXml.xml");
// document.write(fileWriter);
// fileWriter.flush();
// fileWriter.close();
//将内存中的dom树回写到文件中,更新文件 更好用,
//OutputFormat.createPrettyPrint()帮助输出文件时格式化文件,美观
XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("../MyXml.xml"),OutputFormat.createPrettyPrint());
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 修改XML中子元素内容
* */
@Test
public void dom4JUpdate()throws Exception{
//1.获取解析器
SAXReader reader=new SAXReader();
//2.解析XML获取代表整个文档的dom对象
org.dom4j.Document document=reader.read("../MyXml.xml");
//3.获取根节点
Element root=document.getRootElement();
//获取需要修改的标签并将其内容修改
root.element("书").element("特价").setText("4.0元");
//将内存中的dom树回写到文件中,更新文件 更好用,
//OutputFormat.createPrettyPrint()帮助输出文件时格式化文件,美观
XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("../MyXml.xml"),OutputFormat.createPrettyPrint());
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 删除XML中子元素
* */
@Test
public void dom4JDelete()throws Exception{
//1.获取解析器
SAXReader reader=new SAXReader();
//2.解析XML获取代表整个文档的dom对象
org.dom4j.Document document=reader.read("../MyXml.xml");
//3.获取根节点
Element root=document.getRootElement();
//删除的思路:找到要删除的标签,用该标签获取到它的父元素,通过它的父元素删除它
Element bookEle=root.element("书").element("特价");
bookEle.getParent().remove(bookEle);
//将内存中的dom树回写到文件中,更新文件 更好用,
//OutputFormat.createPrettyPrint()帮助输出文件时格式化文件,美观
XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("../MyXml.xml"),OutputFormat.createPrettyPrint());
xmlWriter.write(document);
xmlWriter.close();
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE 书架 SYSTEM "../book.dtd">-->
<书架>
<书>
<书名>如果AI拥有了思想</书名>
<作者>XX</作者>
<售价>140</售价>
</书>
<书>
<书名>人类是否完全依赖于AI</书名>
<作者>SS</作者>
<售价>170</售价>
</书>
</书架>