XML文本解析

XML 全称 eXtensible Markup Language(指可扩展标记语言),常作为配置文件的文件格式;
解析方式有: dom 和 sax
dom 一次读取,十分耗内存,但可以进行curd操作
sax 逐行读取,内存消耗少,只能进行读操作

解析使用Dom4j库,首先创建一个Maven工程,导包

<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>

解析的demo xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<person>
    <p1>
        <name>jason</name>
        <age>26</age>
    </p1>
    <p1>
        <name>tom</name>
        <age>18</age>
    </p1>
</person>

创建Java类,进行解析

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

import java.util.List;

public class TestDom4j {
    public static void main(String[] args) throws Exception {
        SelectName();
    }
    public static void SelectName() throws Exception {
        // 创建解析器
        SAXReader saxReader = new SAXReader();
        // 得到Document
        Document document= saxReader.read("src\\main\\resources\\XmlRead.xml");
        // 得到根节点
        Element root = document.getRootElement();
        //得到所有P1
        List<Element> list= root.elements("p1");
//        Element e1= list.get(0);
//        Element e2= list.get(1);

//        //得到第一个p1
//        Element e1= root.element("p1");
//        Element n1 = e1.element("name");
//        System.out.println(n1.getText());
//        // 得到p1里面的属性值
//        String value = p1.attributeValue("name")
//        System.out.println(value);
        
//        // 删除元素属性
//        n1.getParent();// 获取到n1的父节点e1
//        e1.remove(n1);

        // 遍历list
        for (Element element : list) {
            Element name1 = element.element("name");
            String s = name1.getText();
            System.out.println(s);
        }
    }

    public static void AddXmlInfo(Student student) throws Exception {
        // 创建解析器
        SAXReader saxReader = new SAXReader();
        // 得到Document
        Document document = saxReader.read("src\\main\\resources\\XmlRead.xml");
        // 得到根节点
        Element root = document.getRootElement();
        // 在根节点上添加stu
        Element stu = root.addElement("stu");
        Element id1 = stu.addElement("id");
        Element name1 = stu.addElement("name");
        Element age1 = stu.addElement("age");
        // 赋值
        id1.setText(student.getId());
        name1.setText(student.getName());
        age1.setText(student.getAge());
        //回写XML
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src\\main\\resources\\t1.xml"),format);
        xmlWriter.write(document);
        xmlWriter.close();
    }
      
}

整体看,和Xpath解析HTML很类似.

posted on 2020-10-08 14:41  一剑风徽  阅读(218)  评论(0编辑  收藏  举报

导航