本例演示使用標準 JDK DOM API 解析 XML:構建完整文檔樹,通過 getElementsByTagName 獲取節點列表,隨機訪問提取屬性與文本內容。
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
public class DOMPageList {
public static void main(String[] args) {
try {
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbfactory.newDocumentBuilder();
Document doc = builder.parse(new File("book.xml")); // 解析生成 Document 樹
Element root = doc.getDocumentElement();
System.out.println("根節點標記名:" + root.getTagName());
System.out.println("*****下面遍歷XML元素*****");
NodeList list = root.getElementsByTagName("page"); // 獲取所有 page 元素(含後代)
for (int i = 0; i < list.getLength(); i++) {
Element element = (Element) list.item(i);
String id = element.getAttribute("id"); // 獲取屬性
NodeList titleList = element.getElementsByTagName("title");
Element titleElement = (Element) titleList.item(0);
String title = titleElement.getFirstChild().getNodeValue(); // 獲取文本節點值
NodeList fileList = element.getElementsByTagName("file");
Element fileElement = (Element) fileList.item(0);
String file = fileElement.getFirstChild().getNodeValue();
System.out.println("ID" + id + " " + "title" + title + "file" + file);
}
} catch (Exception e) { e.printStackTrace(); }
}
}
<book>
<page id="1">
<title>第一章 入門</title>
<file>chapter1.html</file>
</page>
<page id="2">
<title>第二章 進階</title>
<file>chapter2.html</file>
</page>
</book>
| 類/方法 | 說明 |
|---|---|
DocumentBuilderFactory | 工廠模式獲取解析器實例 |
DocumentBuilder | 解析器,parse() 生成 Document |
Document | 文檔樹根,getDocumentElement() 獲取根元素 |
Element | 元素節點,getAttribute() 獲取屬性 |
getElementsByTagName() | 遞歸查找所有匹配名稱的後代元素,返回 NodeList |
NodeList | 節點列表,getLength()/item(index) 遍歷 |
getFirstChild().getNodeValue() | 獲取元素首個文本子節點的值(標準 DOM 文本提取方式) |
getParentNode()、getNextSibling() 等)getTextContent() (DOM Level 3) 直接獲取完整文本node.getNodeType() == Node.TEXT_NODE && node.getTextContent().trim().length() > 0getElementsByTagNameNS() 和 getAttributeNS()DocumentBuilder 非線程安全,每線程創建或同步使用import javax.xml.xpath.*;
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
String title = xpath.evaluate("/book/page[@id='1']/title/text()", doc);
XPath 可大幅簡化複雜查詢邏輯,推薦配合 DOM 使用。