使用SAXReader对XML文件进行解析的步骤

一、准备jar包,也可以尝试使用maven

DOM4J是开源组织提供的一个免费的、强大的XML解析工具,如果开发者需要在项目中使用那么需要下载并引入jar包。

1. 下载DOM4J地址:https://mvnrepository.com/

2. 引入:dom4j-1.6.1.jar (核心包)、 jaxen-1.1-beta-6.jar(Xpath支持包)

二、测试

2.1、文件结构

使用SAXReader对XML文件进行解析的步骤_第1张图片

2.2、xml文件:linkMans.xml



    
        王二
        18663243245
        [email protected]
    
    
        李四_editor
        1353243247
        [email protected]
    
    
        王五
        1353243247
        [email protected]
    

2.3、测试

package com.company.documentRW;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List;

/**
 * @program: test
 * @description
 * @author: yaoXu
 * @create: 2020-07-06 14:23
 **/
public class DocumentTest {

    //1. 准备需要解析的xml文件linkMans.xml

    //2. 获取解析器
    public static SAXReader getReader() {
        return new SAXReader();
    }

    //3. 获取解析对象
    public static Document getDocument(File file) throws Exception {
        // 3.1获取解析器
        SAXReader reader = getReader();
        // 3.2解析文档
        Document doc = reader.read(file);
        return doc;
    }

    //4. 获取根元素节点
    public static void getRoot(File file) throws Exception {
        // 4.1获取解析器
        SAXReader reader = getReader();
        // 4.2解析文档
        Document doc = reader.read(file);
        // 4.3获取根元素
        Element root = doc.getRootElement();
        System.out.println(root.getName());
    }

    //5. 获取指定的其他的元素
    public static void getElement(File file) throws Exception {
        // 5.1获取解析器
        SAXReader reader = getReader();
        // 5.2解析文档
        Document doc = reader.read(file);
        // 5.3获取根元素
        Element root = doc.getRootElement();
        // 5.4获取所有的linkman
        List list = root.elements("linkman");
        Iterator it = list.iterator();
        // 5.5循环遍历节点
        while (it.hasNext()) {
            Element ele = (Element) it.next();
            System.out.println(ele.getName());
        }
        System.out.println("---------------");
        // 简化
        for (Iterator i = root.elementIterator(); i.hasNext();) {
            Element element = (Element) i.next();
            System.out.println(element.getName());
        }
        // 5.6获取第二个linkman的名字
        Element linkman2 = (Element) list.get(1);
        String name = linkman2.element("name").getText();
        System.out.println(name);
    }

    //6. 添加元素
    public static Document addElement(File file) throws Exception {
        // 6.1获取解析器
        SAXReader reader = getReader();
        // 6.2解析文档
        Document doc = reader.read(file);
        // 6.3获取根元素
        Element root = doc.getRootElement();
        // 6.4创建新元素
        Element new_linkman = DocumentHelper.createElement("linkman");
        Element new_name = DocumentHelper.createElement("name");
        Element new_phone = DocumentHelper.createElement("phone");
        Element new_email = DocumentHelper.createElement("email");

        new_name.setText("张朝阳");
        new_phone.setText("186252250");
        new_email.setText("[email protected]");
        // 6.5建立关系
        new_linkman.add(new_name);
        new_linkman.add(new_phone);
        new_linkman.add(new_email);
        root.add(new_linkman);

        return doc;
    }

    //7. 修改的document需要进行持久化的操作,因此需要提供以下的方法。
    public static void writeDocument2XML(Document doc, File file) throws Exception {
        // 创建创建一个转换对象,并解决输入的数据时中文的乱码问题
        XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
        // 将doc写入指定文件
        writer.write(doc);
        // 释放资源
        writer.close();
    }

    //8. 修改元素
    public static Document modifyElement(File file) throws Exception {
        // 8.1获取解析器
        SAXReader reader = getReader();
        // 8.2解析文档
        Document doc = reader.read(file);
        // 8.3获取根元素
        Element root = doc.getRootElement();
        // 8.4直接获取第二个linkman的name
        Element name = ((Element) root.elements("linkman").get(1)).element("name");
        name.setText("李四_editor");
        return doc;
    }

    //9. 删除元素
    public static Document removeAll(File file) throws Exception {
        // 9.1获取解析器
        SAXReader reader = getReader();
        // 9.2解析文档
        Document doc = reader.read(file);
        // 9.3获取根元素
        Element root = doc.getRootElement();
        // 9.4获取所有的linkman
        List list = root.elements("linkman");
        // 9.4循环断绝关系
        for (Object temp: list) {
            // 转型
            Element linkman = (Element) temp;
            // 断绝关系
            root.remove(linkman);
        }
        return doc;
    }

    //10. 属性的操作
    public static Document optionAttribute(File file) throws Exception {
        // 10.1获取解析器
        SAXReader reader = getReader();
        // 10.2解析文档
        Document doc = reader.read(file);
        // 10.3获取根元素
        Element root = doc.getRootElement();
        // 10.4获取所有的linkman
        List list = root.elements("linkman");
        // 10.5循环添加属性
        int count = 0;
        for (Object temp: list) {
            // 转型
            Element linkman = (Element) temp;
            // 添加属性
            linkman.add(DocumentHelper.createAttribute(linkman, "id", "00" + (count + 1)));
            count++;
        }
        // 10.5获取第二个linkman属性
        Element linkman3 = (Element) list.get(1);
        String value = linkman3.attribute("id").getText();
        System.out.println(value);
        // 10.6修改属性
        linkman3.attribute("id").setText("007");
        // 10.7删除属性
        linkman3.remove(linkman3.attribute("id"));
        return doc;
    }

    public static void main(String[] args) throws Exception {
        File file = new File("src/linkMans.xml");
        Document doc = optionAttribute(file);
        writeDocument2XML(doc,file);
    }

}

三、总结

1. dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。

2. dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,现在越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。

 

你可能感兴趣的:(问题集锦)