不能在 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