【问题标题】:Can't call getElementsByTagName on a node in Xerces or Neko?不能在 Xerces 或 Neko 的节点上调用 getElementsByTagName?
【发布时间】: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 所以也许我需要用另一种方式来做?

谢谢!

【问题讨论】:

    标签: java xml dom xerces neko


    【解决方案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() 上迭代一个内部循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        • 2011-02-04
        • 1970-01-01
        • 2013-07-19
        • 2011-08-09
        • 1970-01-01
        • 2019-03-04
        相关资源
        最近更新 更多