问题描述
我看到了Java的w3c dom库的怪异行为。对于格式化的XML,我运行document.getElementsByTagName()。getItem(0).getChildNodes()来获取标签的子节点之一。下面是我的标签的样子:
<References>
<Reference Name="a" Value="1"/>
<Reference Name="b" Value="2"/>
<Reference Name="c" Value="3"/>
<Reference Name="d" Value="4"/>
<Reference Name="e" Value="5"/>
<Reference Name="f" Value="6"/>
<Reference Name="g" Value="7"/>
<Reference Name="h" Value="8"/>
<Reference Name="i" Value="9"/>
<Reference Name="j" Value="10"/>
<Reference Name="k" Value="11"/>
<Reference Name="l" Value="12"/>
</References>
下面是我的代码:
NodeList nodeList = document.getElementsByTagName("References").item(0).getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
NamednodeMap currentItemAttributes = nodeList.item(i).getAttributes();
String currentItemName = currentItemAttributes.getNamedItem("Name").getNodeValue();
name=currentItemName;
}
在这里,我为每个备用节点获得了空值,如下所述:
nodeList.item(0).getAttributes()
返回null
nodeList.item(1).getAttributes().getNamedItem("Name").getNodeValue()
返回a
nodeList.item(2).getAttributes()
返回null
nodeList.item(3).getAttributes().getNamedItem("Name").getNodeValue()
返回b
以此类推。
有趣的是,如果我将xml文件缩小到一行并删除所有多余的空格,则它可以正常工作,并且我不会得到备用的null
值。
如果有人可以给我解决方案,那将是很大的帮助。
解决方法
这是因为getChildNodes()正在获得所有NODES。
尝试
document.getElementsByTagName("References").item(0).getElementsByTagName("Reference");
或者您可以检查每个节点的类型(元素)和名称(引用),然后进行处理。