Java:如何通过 org.w3c.dom.document 上的 xpath 字符串定位元素

Posted

技术标签:

【中文标题】Java:如何通过 org.w3c.dom.document 上的 xpath 字符串定位元素【英文标题】:Java: how to locate an element via xpath string on org.w3c.dom.document 【发布时间】:2011-09-26 04:51:51 【问题描述】:

如何通过给定 org.w3c.dom.document 上的 xpath 字符串快速定位元素/元素?似乎没有FindElementsByXpath() 方法。例如

/html/body/p/div[3]/a

我发现当有很多同名元素时,递归遍历所有子节点级别会非常慢。有什么建议吗?

我不能使用任何解析器或库,只能使用 w3c dom 文档。

【问题讨论】:

***.com/questions/45495758/… 【参考方案1】:

试试这个:

//obtain Document somehow, doesn't matter how
DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
org.w3c.dom.Document doc = b.parse(new FileInputStream("page.html"));

//Evaluate XPath against Document itself
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList)xPath.evaluate("/html/body/p/div[3]/a",
        doc, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); ++i) 
    Element e = (Element) nodes.item(i);

使用以下page.html 文件:

<html>
  <head>
  </head>
  <body>
  <p>
    <div></div>
    <div></div>
    <div><a>link</a></div>
  </p>
  </body>
</html>

【讨论】:

在我的代码示例中,doc 属于 org.w3c.dom.Document 类型。如果您已经有Document 的实例,只需使用我的代码的最后两行即可! P.S.:为什么投反对票? 这会返回文本。我需要 domelement 或 domelements。 查看我的编辑(XPathConstants.NODESET 参数的介绍) - 现在它返回 NodeList。还请查看其他常量。 谢谢你,这是一个很好的答案。 @Tomasz Nukiewicz ,你能看看我的实现吗?我知道我不是提问者,我提出了一个不同的问题,但我从你的回答中得到了参考,所以我希望你能帮助我,***.com/questions/26389376/…

以上是关于Java:如何通过 org.w3c.dom.document 上的 xpath 字符串定位元素的主要内容,如果未能解决你的问题,请参考以下文章

java如何通过反射获取包中所有的类?

java中如何通过Smack实现流管理?

如何通过 Graphql 模式生成 java 实体

如何通过按钮覆盖 Java String 中的值?

如何通过反射确定 Java 类是不是是抽象的

用java如何通过api数据接口调用数据