基于DOM4j的XML处理

前言

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

猜你喜欢

转载自blog.csdn.net/qq_41376740/article/details/80989728