org.w3c.dom:仅为当前节点获取标记值

时间:2017-05-30 05:28:50

标签: java xml dom xml-parsing

我在Java中使用org.w3c.dom来解析以下形式的XML文档。

<Fields>
    <Field>
        <Key>Name</Key>
        <Length>20</Length>    <-- what if this is missing?
        <Subfields>
            <Field>
                <Key>First Name</Key>     <-- takes this as the first item
                <Length>11</Length>
            </Field>
            <Field>
                <Key>Second Name</Key>
                <Length>9</Length>
            </Field>
        </Subfields>
    </Field>
    ...
</Fields>

我可以在Element课程中获得<Field>标记。现在,要获得长度(20),我必须这样做

Node attribs = (Node)element.getElementsByTagName("Length").item(0);

方法getElementsByTagName返回所有后代中的长度列表,因此第一项是主要字段的长度。

当主要字段不包含长度时出现问题。在这种情况下,上面的表达式给出了第一个子节点的长度。有没有办法只为当前节点获取标签值,如果不存在,只需返回NULL

修改

我发现的一种方法是检查项目是否是当前字段的直接子项。这似乎工作正常。

element==(Element)attribs.getParentNode()

但我相信还有更好的方法。

1 个答案:

答案 0 :(得分:0)

如果你想只获得节点的直接孩子,你可以这样做:

Node attribs = (Node)element.getElementsByTagName("Field").item(0);      
    Node childNode = attribs.getFirstChild(); // returns Key node     
    while( childNode.getNextSibling()!=null ){          
        childNode = childNode.getNextSibling();// returns all siblings of Key node
        if (childNode.getNodeType() == Node.ELEMENT_NODE) {         
            Element childElement = (Element) childNode;      

这将返回Field的第一个子节点并迭代其兄弟节点。