首頁 >Java >在 Java 中使用 DOM 從 XML 文件取得數據

在 Java 中使用 DOM 從 XML 文件取得數據

王林
王林轉載
2024-02-22 13:01:14428瀏覽

php小編草莓帶您了解如何在Java中使用DOM從XML文件取得資料。 DOM(文件物件模型)是一種處理XML文件的標準方式,透過操作XML樹結構,我們可以輕鬆取得節點、元素和屬性等資訊。在Java中,我們可以利用DOM解析器來讀取XML文件並提取所需資料。接著,我們可以遍歷XML文件的節點,從中提取出我們需要的數據,實現靈活高效的數據獲取操作。

問題內容

我正在嘗試使用 dom 解析 xml 文件,但最後只輸出最後一個條目多次(在循環中)。請告訴我,有什麼問題嗎? (我是java初學者)

xml 大約包含以下內容:

<channel>
    <title>www.google.com</title>
    <item>
        <title>www.youtube.com</title>
    </item>
    <item>
        <title>play.google.com</title>
    </item>
    ...
</channel>

java 程式碼:

Node item = null;
    NodeList channelList = document.getElementsByTagName("channel");
    for (int i = 0; i < channelList.getLength(); i++){

        if (channelList.item(i).getNodeType() == Node.ELEMENT_NODE){
            
            NodeList channelListChild = channelList.item(i).getChildNodes();
            for (int j = 0; j < channelListChild.getLength(); j++){
                if (channelListChild.item(j).getNodeType() == Node.ELEMENT_NODE){

                    switch (channelListChild.item(j).getNodeName()){
                        case "title":{
                            String title = channelListChild.item(j).getTextContent();
                            System.out.println(title);
                            break;
                        }
                        case "item":{
                            item = channelListChild.item(j);
                            break;
                        }
                    }
                }
            }
        }
    }
    if (item == null){
        return;
    }

    String title = null;
    NodeList itemList = item.getChildNodes();

    for (int i = 0; i < itemList.getLength(); i++){
        if (itemList.item(i).getNodeType() == Node.ELEMENT_NODE){

            switch (itemList.item(i).getNodeName()){
                case "title":{
                    title = itemList.item(i).getTextContent();
                    break;
                }
            }
        }
        System.out.println(title);
    }

解決方法

您在循環中依次將變數「item」指派給每個項目,因此退出時其值是遇到的最後一個item 元素。

您並不是唯一一個在此類應用程式中使用 java 和 dom 的人;這是一個流行的組合。但它已經接近25歲了,還有很多更好的選擇可供選擇。即使必須是 java,也有其他 api,例如 jdom2 和 xom,使用起來更友善。

saxon 的樹導航 api(受到 c# 世界中的 linq 的啟發)看起來像這樣:

XdmNode channel = document.getOutermostElement();
String title = channel.select(child("title")).asString();
System.out.println(title);
channel.select(child("item")).forEach(item -> {
   String subtitle = item.select("title").asString();
   System.out.println(subtitle);
}

這是等效 dom 程式碼長度的一小部分。

[免責聲明:saxon是我公司的產品]

以上是在 Java 中使用 DOM 從 XML 文件取得數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除