我有这样的xml:
<param>
<name>some_list</name>
<value>
<items>
<item>
<value>7</value>
<type>Long</type>
</item>
<item>
<value>23</value>
<type>String</type>
</item>
<item>
<value>1.0</value>
<type>Double</type>
</item>
<item>
<value>true</value>
<type>Boolean</type>
</item>
<item>
<value>13-01-2014 16:03:50</value>
<type>Date</type>
</item>
<item>
<value>[7, false]</value>
<type>String</type>
</item>
</items>
</value>
<type>Collection</type>
</param>
我需要获得类型节点的值 - 子od param 节点(在本例中为'Collection')。我对 item 节点的子项不感兴趣,因此解决方案如下:
NodeList nodes = element.getElementsByTagName("type").item(0).getChildNodes();
Node node = (Node) nodes.item(0);
return node.getNodeValue();
错了(它返回'Long',而不是'Collection'!)
答案 0 :(得分:1)
getElementsByTagName
会返回所有后代元素。您只需要所有直接子元素。
您可以使用getChildNodes()
然后根据需要过滤它们。例如:
NodeList children = element.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node node = children.item(i);
if (node.getNodeType() == Node.ELEMENT_TYPE
&& node.getLocalName().equals("type")) {
// Use the node, get its value etc
}
}
您可能希望查看使用XPath或替代Java XML API(例如JDOM)来使这更简单。如果你上面做了很多,你可能想把它提取到一个帮助器方法,以返回所有具有特定元素名称的直接子元素(或者只是第一个元素名称)。