java之xml解析-dom4j

解析方式

XML 解析方式有不少種,可是經常使用的有兩種,以下:java

DOM

Document Object Model:把整個 XML 讀到內存中,造成樹狀結構。整個文檔爲 Document 對象,屬性爲 Attribute 對象,元素節點爲 Element 對象,文本也能夠稱之爲 Text 對象,以上全部對象均可以稱之爲 Node 節點。若是 XML特別大,那麼會形成內存溢出。能夠利用它對 XML 文檔進行增刪操做。dom

SAX

Simple API for XML:基於事件驅動,讀取一行,解析一行。不會形成內存溢出。只能查詢,不能夠進行增刪操做。ide

依賴jar包&文檔下載this

Dom4j使用

依賴jar包

dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar

使用

<?xml version="1.0" encoding="UTF-8" ?>
<students>
    <student>
        <name id="1">楊冪</name>
        <age>32</age>
    </student>
    <student>
        <name>郭德綱</name>
        <age>18</age>
    </student>
</students>
student.xml
package com.zze.test;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.List;

public class XMLParseTest {
    /**
     * Element 方式解析
     */
    @Test
    public void test1() {
        try {
            // 建立 SAX 讀取對象
            SAXReader saxReader = new SAXReader();
            // 指定讀取源
            Document document = saxReader.read(this.getClass().getClassLoader().getResourceAsStream("com/zze/xml/student.xml"));
            // 獲取根元素
            Element rootElement = document.getRootElement();
            List<Element> studentElements = rootElement.elements("student");
            for (Element studentElement : studentElements) {
                String name = studentElement.element("name").getText();
                Integer age = Integer.parseInt(studentElement.element("age").getText());
                System.out.println(String.format("name:%s", name));
                System.out.println(String.format("age:%s", age));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * XPath 方式解析
     * 要使用 XPath ,須要添加 jar 支持:jaxen-1.1-beta-6.jar
     */
    @Test
    public void test2() {
        Document document = null;
        try {
            SAXReader saxReader = new SAXReader();
            document = saxReader.read(this.getClass().getClassLoader().getResourceAsStream("com/zze/xml/student.xml"));
            Element rootElement = document.getRootElement();
            // 獲取文檔中全部 name 節點
            List<Element> nameElements = rootElement.selectNodes("//name");
            for (Element nameElement : nameElements) {
                System.out.println(nameElement.attribute("id") != null ? nameElement.attribute("id").getText() : "");
                System.out.println(nameElement.getText());
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}
相關文章
相關標籤/搜索