我在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()
但我相信还有更好的方法。
答案 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
的第一个子节点并迭代其兄弟节点。