【问题标题】:Java HTML XPath selectorJava HTML XPath 选择器
【发布时间】:2020-07-21 22:59:54
【问题描述】:

我正在尝试为 java 寻找像 C#htmlagilitypack 这样的库来解析 HTML 并使用 XPath 选择元素。

我已经阅读了许多库,但它们都不是用于 HTML 的独立 XPath 选择器,我发现的所有库都需要使用它们的方法解析 HTML,例如 htmlunit

如果有人可以通过 XPath 2.0 或 3.0 和 HTML 解析的简单示例指导我,我将不胜感激。

【问题讨论】:

  • Selenium 可以从 html 中选择 xpathes
  • 我正在寻找一个库来输入 html 字符串并使用 xpath 选择器。 Selenium 需要打开浏览器。
  • 你试过了吗:github.com/code4craft/xsoup。它支持 XPath 1.0 并有一些其他的内置功能。
  • Saxon-HE 的 s9api 似乎是要走的路。
  • 对于 htmlunit,您可以使用 html 字符串作为输入(参见常见问题解答)来获取页面,然后使用 XPath。

标签: java html xpath


【解决方案1】:

Java 支持Xpath。通常,它用于解析 XML 文件。但是,它也应该适用于 HTML。

HTML 示例:

<html lang="en">
<head>
    <title>Index page</title>
</head>
<body>
<div>
    <br/>
    <h1>Hello <span id="my-demo">User!</span></h1>
    <br/>
    <img src="https://s3.amazonaws.com/acloudguru-opsworkslab/ACG_Austin.JPG" alt="photo"/>
</div>
</body>
</html>

代码 sn-p:

public class HtmlXpathParser {
    private DocumentBuilder builder;
    private XPath path;

    public HtmlXpathParser() throws ParserConfigurationException {
        DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
        builder = dbfactory.newDocumentBuilder();
        XPathFactory xpfactory = XPathFactory.newInstance();
        path = xpfactory.newXPath();
    }

    public Optional<String> parse(String fileName) throws SAXException, IOException, XPathExpressionException {
        File file = new File(fileName);

        Document doc = builder.parse(file);
        String result = path.evaluate("//img/@src", doc);

        return Optional.of(result);
    }

    public static void main(String[] args) throws ParserConfigurationException, XPathExpressionException, SAXException, IOException {
        HtmlXpathParser parser = new HtmlXpathParser();

        Optional<String> srcResult = parser.parse("src/main/resources/index.html");
        srcResult.ifPresent(System.out::println);
    }
}

输出:

https://s3.amazonaws.com/acloudguru-opsworkslab/ACG_Austin.JPG

它适用于 XPath 版本 1。如果需要,可以使用 xpath2-parser 之类的东西。

有用的参考资料:

【讨论】:

  • 感谢您提供此答案。我看到的第一个问题是这段代码不能清理坏的 HTML,第二个问题是它不支持 xpath 3。
猜你喜欢
  • 2019-10-11
  • 1970-01-01
  • 2012-07-28
  • 2011-02-06
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
相关资源
最近更新 更多