如何使用Java和Xerces NodeIterator在兄弟姐妹具有相同名称但属性不同时获取兄弟姐妹元素

时间:2015-05-22 14:16:22

标签: java xml xerces

我正在使用Java并尝试解析XML文档。我有一个文档,其中有两个兄弟标签,其元素名称相同,如下所示:

<directory>
    ... <!-- other data and elements -->

    <application id="ID1">
    </application>

    ... <!-- other elements -->

    <application id="ID2">
    </application>
    ... <!-- other element and data -->
</directory>

我使用Xerces来解析XML并使用NodeIterator来处理它。我想从上面的示例XML中获取其属性<application>的第二个元素id="ID2"。使用方法getElementsByTagName("tagname")时,返回的元素始终是其属性id="ID1"的第一个元素。

如何获得具有相同名称和相似属性的第二个元素,尽管属性的值不同?

1 个答案:

答案 0 :(得分:1)

getElementsByTagName("application")返回NodeList。要获取第二个元素,可以使用

NodeList applications = getElementsByTagName("application");
Node second = applications.item(1);

如果您想确定,则需要遍历applications,直到找到包含id == "ID2"的节点:

for( int i=0; i<applications.length(); i++) {
    Node node = applications.item(i);
    if(!(node instanceof Element)) continue;
    Element e = (Element) node;
    String id = e.getAttributeNode("id").getValue();
    if("ID2".equals(id)) {
        ... do something with the node ...
    }
}

注意:如果可以,请尝试切换到JDOM2。它有一个更好的API,特别是当你使用Java 6或更好。