不能在 Xerces 或 Neko 的节点上调用 getElementsByTagName?

Posted

技术标签:

【中文标题】不能在 Xerces 或 Neko 的节点上调用 getElementsByTagName?【英文标题】:Can't call getElementsByTagName on a node in Xerces or Neko? 【发布时间】:2011-03-19 20:34:08 【问题描述】:

大家好,我正在尝试使用 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 所以也许我需要用另一种方式来做?

谢谢!

【问题讨论】:

【参考方案1】:

NodeList 仅返回 Nodes,而 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");

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于不能在 Xerces 或 Neko 的节点上调用 getElementsByTagName?的主要内容,如果未能解决你的问题,请参考以下文章

ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration 不能转换为 org.apache.xerc

XIncludeAwareParserConfiguration 不能转换为 org.apache.xerces.xni.parser.XMLParserConfiguration

.ClassCastException:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 不能转换为 javax.xml.parsers.Docume

java.lang.ClassCastException:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 不能转换为 javax.xml.parse

xerces-3.1.1 无法在 MSYS 上创建 dll?

NEKO's Maze Game-cf