前言
3大解析DOM,SAX,现在就是DOM4J了,直接上代码把,实现curd功能
package dom4j;
import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.*;
import java.util.List;
public class Demo {
public Document getDocument() throws DocumentException {
SAXReader reader = new SAXReader();
return reader.read(new File("src/test.xml"));
}
public void write2xml(Document document) throws IOException {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/test.xml")), format);
writer.write(document);
writer.close();
}
// dom4j只能一层一层往下查找,从root开始
public void getValue(Document document) {
Element root = document.getRootElement();
Element date = root.element("书").element("日期");
System.out.println(date.getTextTrim());
}
// 获取属性值
public void getAttrValue(Document document) {
Element root = document.getRootElement();
String bookName = root.element("书").element("书名").attributeValue("id");
System.out.println(bookName);
}
// 添加节点(添加一本新的书)
public void add(Document document) throws IOException {
Element root = document.getRootElement();
Element book = DocumentHelper.createElement("书");
Element bookName = DocumentHelper.createElement("书名");
bookName.setText("php书");
book.add(bookName);
root.element("书").add(book);
write2xml(document);
}
// 修改一个节点的值
public void update(Document document) throws IOException {
Element root = document.getRootElement();
Element author = root.element("书").elements("作者").get(0);
author.setText("张三");
write2xml(document);
}
// 删除一个节点(书)
public void delete(Document document) throws IOException {
Element root = document.getRootElement();
Element target = root.elements("书").get(0);
target.getParent().remove(target);
write2xml(document);
}
// 在固定的位置添加节点,用list的方式
public void add2(Document document) throws IOException {
Element root = document.getRootElement();
Element newEle = DocumentHelper.createElement("出版社");
newEle.setText("南京大学");
List<Element> list = root.element("书").elements();
list.add(2,newEle);
write2xml(document);
}
//通过xpath来解析xml
public void find(Document document) throws IOException {
Element root = document.getRootElement();
List<Node> target = document.selectNodes("//书名");
for (Node node : target){
System.out.println(node.getText());
}
}
}
有了DOM和SAX的基础,我们就能很好的理解DOM4j了,附上两个教程
dom4j https://dom4j.github.io/#xpath
Xpath语法 http://www.w3school.com.cn/xpath/xpath_syntax.asp