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

11

大家好,我正在尝试使用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个回答

9

NodeList 只返回节点,getElementsByTagName 仅适用于 元素节点。因此,您需要将 Node 转换为 Element,以下是一个示例。

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

但是要小心,因为这里假设getParentNode()总是返回一个元素(Element)。

以下方法更加安全,但是需要写得冗长一些。

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

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接