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

How to get Sibling Elements when siblings have same name but different attributes using Java and Xerces NodeIterator

我正在使用 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 中获取属性 id="ID2" 的第二个元素 <application>。使用方法 getElementsByTagName("tagname") 时,返回的元素始终是属性为 id="ID1".

的第一个元素

如何获取具有相同名称和相似属性但属性值不同的第二个元素?

getElementsByTagName("application")returns一个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 或更好时。