Node.hasChildNodes()返回反向布尔值

时间:2017-06-13 09:44:54

标签: java xml dom xml-parsing

我有一个xml文档,我试图使用DOM解析器进行解析。

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <trajectorys version="1.4.1.1">
    <trajectory uid="a" uidWell="b" uidWellbore="c">
       <nameWell>xval</nameWell>
       <nameWellbore>yval</nameWellbore>
       <trajectoryStation uid="0.00">
           <dTimStn>2017-02-04T10:51:20.000-06:00</dTimStn>
           <typeTrajStation>unknown</typeTrajStation>
       </trajectoryStation>
       <commonData>
           <dTimCreation>2017-02-20</dTimCreation>
           <dTimLastChange>2017-02-20</dTimLastChange>
       </commonData>
  </trajectory>
  </trajectorys>

我正在尝试使用Node.hasChildNodes()查找子节点。对于 nameWell nameWellbore 节点,它返回 True ,即使它没有子节点,而 trajectoryStation commonData 返回 False 。 我不明白为什么hasChildNodes方法会出现这种反向行为。

1 个答案:

答案 0 :(得分:0)

您提到的所有元素节点都有子节点,并且该方法对所有节点都返回true。您确定要测试正确的节点吗?

另请注意,#hasChildNodes()包括所有类型的节点,元素,文本,注释等。

更新

为了给你一个想法,这就是我通常在DOM文档中收集子元素的方式:

private List<Element> childElementsOf(Element parent) {
    List<Element> result = new LinkedList<>();
    Node node = parent.getFirstChild();
    while(node != null) {
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            result.add((Element) node);
        }
        node = node.getNextSibling();
    }
    return result;
}