【Java】使用 Java 對 XML 檔案的節點(Node)進行瀏覽與搜尋特點節點內容 – org.w3c.dom
準備一份 XML
檔案,再利用 Java 遍歷裡面的節點內容跟搜尋特定節點內容
認識 Node、Element 的差異
Node
Node
為 DOM 中的基本介面,它代表 Tree 結構的每一個節點,
元素(Element
)、屬性(Attr
)、內文(Text
)、註解(Comment
) 皆被視為節點,並且都繼承 Node
介面。
Node
介面提供所有節點通用的方法,例如: getNodeName()
, getNodeValue()
, getParentNode()
, getChildNodes()
等。
Element
代表XML
檔案的元素,擴展了Node
介面,並增加處理元素的方法。
Element
介面提供專用的方法,來操作元素的標籤、屬性、內文等,例如: getTagName()
, getAttribute(String name)
, setAttribute(String name, String value)
等。
XML 檔案 simple.xml
<catalog>
<book id="1">
<title>Programming in Java</title>
<author>John Doe</author>
<price>39.99</price>
</book>
<book id="2">
<title>Learning XML</title>
<author>Jane Smith</author>
<price>29.99</price>
</book>
</catalog>
使用 Java 瀏覽與搜尋 XML 檔案的節點內容
瀏覽
try {
// 建立工廠
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 建立 DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
// 載入 XML 文件
Document document = builder.parse("/yourDirectory/simple.xml");
// 取得 Book 所有 Node
NodeList nodeList = document.getElementsByTagName("book");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
String id = element.getAttribute("id");
String title = element.getElementsByTagName("title").item(0).getTextContent();
String author = element.getElementsByTagName("author").item(0).getTextContent();
String price = element.getElementsByTagName("price").item(0).getTextContent();
System.out.println("Book ID: " + id);
System.out.println("Title: " + title);
System.out.println("Author: " + author);
System.out.println("Price: " + price);
System.out.println();
}
}
} catch (Exception e) {
System.out.println(e);
}
結果
Book ID: 1
Title: Programming in Java
Author: John Doe
Price: 39.99
Book ID: 2
Title: Learning XML
Author: Jane Smith
Price: 29.99
搜尋
try {
// 建立工廠
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 建立 DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
// 載入 XML 文件
Document document = builder.parse("/Users/roy/Desktop/Program/Practice/src/test/resources/simple.xml");
// 搜尋
Element element = (Element) document.getElementsByTagName("book").item(1);
System.out.println("Specific Book:");
String id = element.getAttribute("id");
String title = element.getElementsByTagName("title").item(0).getTextContent();
String author = element.getElementsByTagName("author").item(0).getTextContent();
String price = element.getElementsByTagName("price").item(0).getTextContent();
System.out.println("Book ID: " + id);
System.out.println("Title: " + title);
System.out.println("Author: " + author);
System.out.println("Price: " + price);
System.out.println();
} catch (Exception e) {
System.out.println(e);
}
結果
Specific Book:
Book ID: 2
Title: Learning XML
Author: Jane Smith
Price: 29.99
心得
先了解如何載入XML
文件,再來是了解DOM
的結構,像Node
、Element
、Attribute
等等,
知道Node
是所有節點的父介面。
參考資料
- ChatGPT
- Javadocument获取子节点