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

时间:2010-07-22 23:01:31

标签: 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
}

是我理想的选择。我似乎只能在文档本身上调用getElementsByTagName?难道我做错了什么?我应该能够在Node元素上调用它吗?

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

谢谢!

2 个答案:

答案 0 :(得分:7)

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

final NodeList images = ((Element)divs.item(i).getParentNode()).getElementsByTagName("IMG");

但请小心,因为它假设 getParentNode()总是返回一个元素

这会更安全,但更详细

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

if(n instanceof Element) {
    final Element e = (Element)n;
    e.getElementsByTagName("IMG");
}

答案 1 :(得分:0)

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