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(); } } }