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

标签 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所以也许我需要换一种方式?

谢谢!

最佳答案

NodeList 仅返回节点,getElementsByTagName 仅适用于 Element node因此,您需要将 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");
}

关于java - 无法在 Xerces 或 Neko 中的节点上调用 getElementsByTagName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3314204/

相关文章:

java - 在我的网络应用程序中设置时区

xml - 使用 XPath 格式化日期

java - 从java访问xml字符串

javascript - 文档.activeElement

internet-explorer - 如何从 Powershell 访问 Internet Explorer 运行实例的经典 Internet Explorer COM 自动化对象?

java - Java 工厂模式的返回类型

java - 如何将 JOOQ 生成器设置为不使用包名称为类型添加前缀

java - 使用 Itext 将文本添加到 pdf 的每一页

android - 当文本太长时,如何减小 TextView 的大小?

javascript - 单击父项,忽略其子项