在Java中使用XPath查询HTML的库?

在Java中使用XPath查询HTML的库?,java,html,xhtml,xpath,Java,Html,Xhtml,Xpath,有人能推荐我一个java库,让我可以通过URL进行XPath查询吗? 我尝试过JAXP,但没有成功 谢谢。我使用JTidy将HTML转换成一个合适的DOM,然后使用普通XPath查询DOM 如果您想进行跨文档/跨URL查询,最好将JTidy与XQuery一起使用。非常类似于jQuery语法方式。您可以与Saxon一起使用。通过这种方式,您只需将使用TagSoup的任何XML SAX解析器替换掉,XPath 2.0或XSLT 2.0或XQuery 1.0实现就可以像往常一样工作。有几种不同的方法在

有人能推荐我一个java库,让我可以通过URL进行XPath查询吗? 我尝试过JAXP,但没有成功


谢谢。

我使用JTidy将HTML转换成一个合适的DOM,然后使用普通XPath查询DOM


如果您想进行跨文档/跨URL查询,最好将JTidy与XQuery一起使用。

非常类似于jQuery语法方式。

您可以与Saxon一起使用。通过这种方式,您只需将使用TagSoup的任何XML SAX解析器替换掉,XPath 2.0或XSLT 2.0或XQuery 1.0实现就可以像往常一样工作。

有几种不同的方法在Web上进行了说明:

使用

  • HtmlCleaner/JavaDOM解析器-(这是我推荐的方式)
  • HtmlCleaner本身有一个支持XPath的内置实用程序——请参阅javadocs或本例
使用

  • 杰里科和杰克森

我已经尝试了这些方法的几种不同变体,即HtmlParser加上Java DOM解析器,以及JSoup加上Jaxen,但效果最好的组合是HtmlCleaner加上Java DOM解析器。下一个最好的组合是杰里科加杰克森

使用
Xsoup
。根据文档,它比
HtmlCleaner
更快。范例

 @Test
    public void testSelect() {

        String html = "<html><div><a href='https://github.com'>github.com</a></div>" +
                "<table><tr><td>a</td><td>b</td></tr></table></html>";

        Document document = Jsoup.parse(html);

        String result = Xsoup.compile("//a/@href").evaluate(document).get();
        Assert.assertEquals("https://github.com", result);

        List<String> list = Xsoup.compile("//tr/td/text()").evaluate(document).list();
        Assert.assertEquals("a", list.get(0));
        Assert.assertEquals("b", list.get(1));
    }
@测试
公共void testSelect(){
字符串html=“”+
“ab”;
documentdocument=Jsoup.parse(html);
String result=Xsoup.compile(“//a/@href”).evaluate(document.get();
Assert.assertEquals(“https://github.com“,结果);
List List=Xsoup.compile(“//tr/td/text()”).evaluate(document.List();
Assert.assertEquals(“a”,list.get(0));
Assert.assertEquals(“b”,list.get(1));
}

链接到Xsoup-

我不确定。它执行更简单的查询,这是基于xpath的。您可以阅读一些文档,其中有很多很酷的示例,解释了如何运行querys.jsoup(至少在1.7.3版中)不支持XPath.jsoup使用css/jQuery语法方式,这与XPath类似,也优于XPath。css选择器并不优于XPath。有些东西你可以在XPath中选择,但CSS选择器不可以。请看-这不是一个完全重复的问题,因为它询问了特定的XPath功能,但有更好的答案。@Reonarudo我的情况与你问这个问题时的情况相同。答案中有许多可能的建议/解决方案,但我想知道您使用了哪种解决方案(库)以及它是否按照您想要的方式工作?@UtherPendragon对不起,这是很久以前的事了,我记不起这是哪个项目。无论如何,现在应该有更新/更好的库可用。请注意,在Android 4.2.2上,HtmlCleaner 2.5比jSoup 1.7.2慢4倍。请注意,HtmlCleaner仅支持XPath 1.0.HTML Cleaner+DOM Serializer+Threading=非常糟糕的内存泄漏