DOM XML - 如何获取子节点?

时间:2014-01-13 16:33:32

标签: java xml

我有这样的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'!)

1 个答案:

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