如何获取java中HTML中元素的XPath?
How to get the XPath of an element in HTML in java?
我想完成一个简单的任务,但我正在努力寻找一个简单的解决方案:我在字符串(或文件)中有一个网页的 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>
)、转义等
我设法以这种方式解析 "correctly" 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>
所以我不能 select 使用它们的属性,比如 href。我该如何解决这个新问题?
我注意到有些链接仍然有它们的 href,它们是指向其他网站(如 facebook 或 twitter)的链接。这可能相关吗?
已解决:
我设法让所有事情都以这种方式工作:
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 库。
我想完成一个简单的任务,但我正在努力寻找一个简单的解决方案:我在字符串(或文件)中有一个网页的 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>
)、转义等
我设法以这种方式解析 "correctly" 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>
所以我不能 select 使用它们的属性,比如 href。我该如何解决这个新问题?
我注意到有些链接仍然有它们的 href,它们是指向其他网站(如 facebook 或 twitter)的链接。这可能相关吗?
已解决:
我设法让所有事情都以这种方式工作:
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 库。