2011-04-10 54 views
4

可以說我有這個XML文件:的Java XML的getElementsByTagName()函數

<attributes> 
    <units> 
    <civilians> 
     <unit> 
     <name>Settler</name> 
     <stats> 
      <attack>26</attack> 
      <defence>7</defence> 
     </stats> 
     <costs> 
      <lumber/> 
      <iron/> 
     </costs> 
     </unit> 
     <unit> 
     <name>Infantry</name> 
     <stats> 
      <attack>33</attack> 
      <defence>7</defence> 
     </stats> 
     <costs> 
      <lumber/> 
      <iron/> 
     </costs> 
     </unit> 
    </civilians> 
    </units> 
</attributes> 

確實的getElementsByTagName(「攻擊」)的節點屬性返回的NodeList與第一位置和攻擊含26攻擊元素在第二個位置包含33個元素?

我一直在想是這樣的話,但它似乎並沒有工作。

如果不是這麼簡單;什麼是從XML文件中獲取所有攻擊值的好方法?也許XML文件本身結構嚴重不足?

編輯:嗯。我現在得到了節點,而.getTextContent()而不是.getNodeValue()解決了我的問題。抱歉給你帶來不便。

+1

什麼行爲,你得到呢? – Alohci 2011-04-10 20:28:38

+0

那麼我得到的元素好,但他們似乎已經失去了他們的價值觀。當我做Nodes.item(0).getNodeValue()(節點是NodeList)時,我得到null:/ – Alexus48 2011-04-10 20:47:36

回答

7

Dom Core 2 Spec說:

的getElementsByTagName

返回與給定的標籤 名稱的所有後代Elements的NodeList,在它們在 這個序遍歷中遇到 順序元素樹。

而且Dom Core 3 Spec說:

的getElementsByTagName

返回與給定的標籤 名稱的所有後代Elements的NodeList,在文檔順序。

所以你對功能的預期是正確的。如果這不是你所得到的,那將會是你的代碼或你正在使用的庫中的一個錯誤。

+0

很高興聽到。那麼現在我得到的元素,但他們的價值觀似乎失去了。當我做Nodes.item(i).getNodeValue()我得到空回報:/ – Alexus48 2011-04-10 20:49:35

+1

@ Alexus48 - 正確。您正在獲取元素的節點值。您需要獲取元素的文本節點子值。我建議Nodes.item(i).getTextContent()或Nodes.item(i).getFirstChild()。getNodeValue() – Alohci 2011-04-10 23:47:45

-2

我從來沒有使用過XML在Java中,但肯定你可以只通過元素循環,檢查各一個攻擊鍵。?對不起,如果這不是你要找的, 這只是我會做的,因爲我不知道Java中的XML類。希望它有幫助。

相關問題