XML 解析方式有不少種,可是經常使用的有兩種,以下:java
Document Object Model:把整個 XML 讀到內存中,造成樹狀結構。整個文檔爲 Document 對象,屬性爲 Attribute 對象,元素節點爲 Element 對象,文本也能夠稱之爲 Text 對象,以上全部對象均可以稱之爲 Node 節點。若是 XML特別大,那麼會形成內存溢出。能夠利用它對 XML 文檔進行增刪操做。dom
Simple API for XML:基於事件驅動,讀取一行,解析一行。不會形成內存溢出。只能查詢,不能夠進行增刪操做。ide
依賴jar包&文檔下載this
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>
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(); } } }