Java利用SAX(Simple API for XML)方式解析XML
SAX解析工具- Sun公司提供的。內置在jdk中。org.xml.sax.*
基於事件驅動,逐條解析,適用於只處理xml數據,不易編碼,而且很難同時訪問同一個文檔中的多處不同數據
解析思想:通過流的方式將xml文件讀到Java代碼中,然後對流進行解析。
解析目的:獲得其每一個節點中的每一個屬性
解析步驟:
- 創建SAXReader流對象
- 利用SAXReader對象讀取xml文件並以document對象進行接收
- 利用getRootElement()方法獲取根節點
- 利用elements()方法獲取子節點並存到list集合中
List<Element> elements = rootElement.elements();//list集合中的泛型可以是接口
只要是引用類型都可以
- 對List集合進行遍歷即可獲取每個節點的相關屬性。
代碼實例:
Xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<animals>
<animal class="dog">
<name>wangCai</name>
<age>3</age>
<gender>male</gender>
</animal>
<animal class="tiger">
<name>tiger1</name>
<age>5</age>
<gender>male</gender>
</animal>
</animals>
Java代碼:
package com.xml.demo;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class DemoXML {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
try {
//獲取document對象
Document document = reader.read(new File(System.getProperty("user.dir")
+File.separator+"src", "animals.xml"));
//獲取根節點
Element rootElement = document.getRootElement();
//獲取子節點
List<Element> elements = rootElement.elements();
for (Element element : elements) {
//獲取指定屬性值
String className = element.attribute("class").getValue();
String name = "";//姓名
String age = "";//年齡
List<Element> elements2 = element.elements();
for (Element element2 : elements2) {
String name2 = element2.getName();
System.out.println(name2);
if("name".equals(name2)) {
name = element2.getText();
}else if("age".equals(name2)) {
age = element2.getText();
}
}
System.out.println("類別:"+className
+ ";姓名:" + name
+ ";年齡:" + age);
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}