【问题标题】:How to get the XPath of an element in HTML in java?如何在java中获取HTML中元素的XPath?
【发布时间】:2018-10-13 19:00:51
【问题描述】:

我想完成一个简单的任务,但我正在努力寻找一个简单的解决方案:我在字符串(或文件)中有网页的 HTML,我想生成给定的 XPath元素。 (例如,我想检索 <a> 元素的 XPath)

我尝试了不同的解决方案,但在正确解析 html 时经常遇到问题。是否有像这样的用于 java 的功能性 html 清洁器? https://www.htmlwasher.com/ 这是我目前发现的唯一有效的清洁器,但它是一个在线工具。有了这个,我可以轻松解析 HTML 并访问 XPath。

我目前正在以这种方式使用 jOOX (https://github.com/jOOQ/jOOX) 来生成 XPath:

Document document = $(html).document();
System.out.println($(document).find("a").xpath());

如果使用我提供的在线工具清理 HTML,我可以生成正确的 XPath。 我喜欢我可以与 jOOX 交互的方式,前提是我可以正确地以编程方式解析 html。你知道解析 HTML 的好方法吗? 我已经试过了:

  • JSoup
  • 标签汤
  • HtmlCleaner

测试网站页面是http://www.ansa.it

编辑: 解析在一些常见的 HTML 解析问题上失败,例如未关闭的标签(例如 </img>)、转义等。

我设法以这种方式“正确”解析了 html:

Document doc = Jsoup.parse(Jsoup.clean(html, Whitelist.relaxed())); doc.outputSettings().escapeMode(EscapeMode.xhtml) .syntax(Syntax.xml) .charset(StandardCharsets.UTF_8);

事实上,<a href="cinema.shtml">Cinema</a> 之类的标签变成了<a>Cinema</a>,所以我无法使用它们的属性(例如 href)来选择它们。我该如何解决这个新问题?

我注意到一些链接仍然有它们的 href,它们是指向其他网站的链接,如 facebook 或 twitter。这有关系吗?

【问题讨论】:

  • 不清理时特别失败的原因是什么?
  • 我编辑了这个问题! @aglassman顺便说一句,我在一些未封闭的标签上失败了, 不允许和类似的东西。我设法让它清理 html,但发生了一些奇怪的事情:许多 标签丢失了它们的 href 属性!

标签: java html xml xpath xhtml


【解决方案1】:

已解决

我设法让所有事情都以这种方式工作:

String html = getTheHTMLSomeWay();

Document doc = Jsoup.parse(Jsoup.clean(html, "http://base.uri", Whitelist.relaxed().preserveRelativeLinks(true)));
doc.outputSettings().escapeMode(EscapeMode.xhtml).syntax(Syntax.xml).charset(StandardCharsets.UTF_8);

org.w3c.dom.Document document = $(doc.html()).document();

System.out.println($(document).find("a[href='/your/relative/url']"));

使用 Jsoup 我可以清除 HTML 中所有无聊的未封闭标签、不允许的标签等。然后我可以转义所有未转义的字符(根据 xhtml)和将语法设置为 xml

这可以为您提供干净的 html 代码,可用于 jOOX 库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2020-08-04
    • 2011-07-10
    • 2017-05-04
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多