无法在Xerces或Neko中的节点上调用getElementsByTagName?

Jam*_*mes 10 java xml dom xerces neko

大家好我正在尝试使用Java中的Neko/Xerces解析DOM树.

NodeList divs = this.doc.getElementsByTagName("DIV");
for(int i=0; i < divs.getLength(); i++) {
    NodeList images = divs.item(i).parentNode().getElementsByTagName("IMG");
    // operate on these
}
Run Code Online (Sandbox Code Playgroud)

是我理想的喜欢做的事情.看来我只能调用getElementsByTagName文件本身?难道我做错了什么?我应该能够在一个Node元素上调用它吗?

我可以从文档中看到它不存在:http://xerces.apache.org/xerces-j/apiDocs/org/w3c/dom/Node.html所以也许我需要以另一种方式做到这一点?

谢谢!

ree*_*esy 8

NodeList仅返回节点,getElementsByTagName仅在Element节点上可用因此您需要将Node转换为元素,下面是一个示例.

final NodeList images = ((Element)divs.item(i).getParentNode()).getElementsByTagName("IMG");
Run Code Online (Sandbox Code Playgroud)

但请注意这一点,因为它假设 getParentNode()始终返回一个Element

这会更安全,但更冗长

final Node n = divs.item(i).getParentNode();

if(n instanceof Element) {
    final Element e = (Element)n;
    e.getElementsByTagName("IMG");
}
Run Code Online (Sandbox Code Playgroud)


Aar*_*man 0

是的,这很奇怪。Python 的 xml.dom.minidom 有一个 Node.getElementsByTagName。也许它不是标准的一部分。相反,您可以在 上迭代内部循环divs.item(i).parentNode().getChildNodes()