2011-04-10 56 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类。希望它有帮助。

相关问题