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();
        }
    }
}
相关文章
相关标签/搜索