2014-01-13 54 views
0

我有这样的XML:DOM 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节点(在这种情况下, '收藏')。我的项目节点不感兴趣的孩子,所以解决方案是这样的:

NodeList nodes = element.getElementsByTagName("type").item(0).getChildNodes(); 
Node node = (Node) nodes.item(0); 
return node.getNodeValue(); 

是错误的(它返回“龙”,不是“收藏”!)

+0

Long是第一个元素上的类型标记的值,例如item(0)为什么你期望它是String? – Mark

+0

我期望它是'集合' - 一个低于'param'节点的lvl。 –

回答

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),使这个简单,太。如果你做了以上很多事情,你可能想把它提取到一个帮助器方法中,以返回所有具有特定元素名称的直接子元素(或者仅仅是第一个元素)。