【问题标题】:DOM XML - How to get child node?DOM XML - 如何获取子节点?
【发布时间】:2014-01-14 00:39:00
【问题描述】:

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

我需要获取 type 节点的值 - 子 od param 节点(在本例中为“集合”)。我对 item 节点的子节点不感兴趣,因此解决方案如下:

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

是错误的(它返回“Long”,而不是“Collection”!)

【问题讨论】:

  • Long 是第一个元素上按类型标记的值,例如 item(0) 为什么你希望它是字符串?
  • 我希望它是 'Collection' - 比 'param' 节点低一级。

标签: java xml


【解决方案1】:

getElementsByTagName 返回所有后代元素。你只需要所有直接的 child 元素。

您可以使用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)来简化此操作。如果您经常执行上述操作,您可能希望将其提取到一个辅助方法中,以返回所有具有特定元素名称的直接子项(或仅返回第一个)。

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 2015-11-20
    • 2018-08-25
    • 1970-01-01
    • 2016-10-09
    • 2015-02-28
    • 2012-03-01
    • 2013-04-15
    相关资源
    最近更新 更多