【Java】使用 Java 對 XML 檔案的節點(Node)進行瀏覽與搜尋特點節點內容 – org.w3c.dom

Source: W3Schools

準備一份 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的結構,像NodeElementAttribute等等,
知道Node是所有節點的父介面。

參考資料

  1. ChatGPT
  2. Javadocument获取子节点

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *