学习了下dom4j工具的基本操作方法,将练习的代码记录一下。
1.要操作的xml文件:book.xml
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书 出版社="TC">
<书名>Java</书名>
<作者>Java Author</作者>
<售价>9.99</售价>
<简介>Java Book</简介>
<出版日期>1999-09-09</出版日期>
</书>
<书 出版社="TT">
<书名>AI</书名>
<团购价>5.99</团购价>
<作者>AI Author</作者>
<售价>69.99</售价>
<简介>AI Java</简介>
</书>
</书架>
复制代码
2.Java代码
//========================================================
package dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import javax.xml.parsers.SAXParserFactory;
import java.util.List;
/**
* @author Hiseico
* @create 2018-05-18 14:46
* @desc
**/
public class Demo4jTest {
public static void main(String[] args) throws DocumentException {
getTextContent();
}
/**
* 获取第二本书
*/
public static void getTextContent() throws DocumentException {
// 获取解析器对象
SAXReader saxReader = new SAXReader();
// 解析XML,返回Document对象
Document document = saxReader.read("src/dom4j/book.xml");
// 获取根节点(书架标签)
Element root = document.getRootElement();
// 获取书的节点,获取第二本书
List<Element> books = root.elements("书");
Element book2 = books.get(1);
// 获取作者的标签
Element author2 = book2.element("作者");
// 获取文本内容
System.out.println(author2.getText());
}
}
//========================================================
/**
* 在第二本书下添加子节点
*/
public static void addElement() throws DocumentException, IOException {
//获取解析器对象
SAXReader saxReader = new SAXReader();
//解析XML,返回Document对象
Document document = saxReader.read("src/dom4j/book.xml");
//获取根节点
Element root = document.getRootElement();
//获取第二本书
Element book2 = (Element) root.elements("书").get(1);
//可以直接在第二本书下添加子节点,设置文本内容
book2.addElement("出版日期").setText("2018-07-05");
// 回写
//XML文档格式化
OutputFormat format = OutputFormat.createPrettyPrint();
//XML文档格式压缩
//OutputFormat format1 = OutputFormat.createCompactFormat();
//设置XML文件编码
format.setEncoding("UTF-8");
//document.setXMLEncoding("GBK");
//回写类
XMLWriter writer = new XMLWriter(new FileOutputStream("src/dom4j/book.xml"), format);
//回写到文档
writer.write(document);
//关闭输出流
writer.close();
}
//========================================================
/**
* 第二本书的作者标签之前添加团购价的标签
* 在指定的位置添加子节点
*/
public static void addElementINSomeWhere() throws DocumentException, IOException {
// List
// 获取解析器对象
SAXReader saxReader = new SAXReader();
// 解析XML
Document document = saxReader.read("src/dom4j/book.xml");
// 获取根节点
Element root = document.getRootElement();
// 获取第二本书
Element book2 = (Element) root.elements("书").get(1);
// 获取书下的所有子节点,返回List集合
List<Element> list = book2.elements();
// 创建元素对象 DocumentHelper.createElement("NodeName");
Element groupBuy = DocumentHelper.createElement("团购价");
groupBuy.setText("5.99");
// list.add(index,Element)
list.add(1, groupBuy);
//格式化xml
OutputFormat format = OutputFormat.createPrettyPrint();
// 回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/dom4j/book.xml"), format);
writer.write(document);
writer.close();
}
//========================================================
/**
* 删除子节点
* 删除第二本书下的出版日期节点
*/
public static void delElement() throws DocumentException, IOException {
// 获取解析器对象
SAXReader saxReader = new SAXReader();
// 解析XML
Document document = saxReader.read("src/dom4j/book.xml");
// 获取根节点
Element root = document.getRootElement();
//获取出版日期节点
Element book2 = (Element) root.elements("书").get(1);
Element createBookDate = book2.element("出版日期");
//通过父节点删除出版日期
book2.remove(createBookDate);
//格式化xml文档
OutputFormat format = OutputFormat.createPrettyPrint();
//回写XML文档
XMLWriter writer = new XMLWriter(new FileOutputStream("src/dom4j/book.xml"), format);
writer.write(document);
writer.close();
}
//========================================================
/**
* 修改文本内容
*/
public static void editElementContext() throws DocumentException, IOException {
// 获取解析器对象
SAXReader saxReader = new SAXReader();
// 解析XML
Document document = saxReader.read("src/dom4j/book.xml");
//获取根节点
Element root = document.getRootElement();
//获取要修改的节点的父节点
Element book2 = (Element) root.elements("书").get(0);
//获取要修改的节点
Element editElement = book2.element("出版日期");
//设置新的内容
editElement.setText("1999-09-09");
//格式化xml
OutputFormat format = OutputFormat.createPrettyPrint();
//回写xml文档
XMLWriter writer = new XMLWriter(new FileOutputStream("src/dom4j/book.xml"), format);
writer.write(document);
writer.close();
}
//========================================================
复制代码