当兄弟姐妹具有相同名称但使用 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 或更好时。
我正在使用 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 或更好时。