我想完成一个简单的任务,但是我正在努力寻找一个简单的解决方案:我将网页的HTML包含在String(或File)中,并且我想生成给定元素的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。 如果只有我可以正确地以编程方式解析html,我喜欢与jOOX进行交互的方式。 您知道解析HTML的好方法吗? 我已经尝试过:

  • JSoup
  • Tagsoup
  • 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)的链接。 这可能有关吗?

#1楼 票数:0 已采纳

解决

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

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库一起使用。

  ask by L. Don translate from so

未解决问题?本站智能推荐:

2回复

如何选择XPath中具有特定类的最后一个XHTML元素?

我的目标XHTML文档(简体)如下所示: 我正在尝试选择“ boris”类的最后一个。 XPath表达式 选择所有类鲍里斯的跨度。 如何选择其中的最后一个? 我试过了 这是行不通的,因为last()此处是指整个文档中的最后一个跨度。 如何选择鲍里斯课程的所有跨度,然后选
1回复

XPath主要用于Html或XML或XHTML?

我是XPath概念的新手,我对XPath有一个非常基本的了解。 我开始首先使用XPath在HTML页面上查找Web元素。 现在,在搜索Web(视频和文本)时,我发现所有XPath教程都与XML(而不是HTML页面)相关。 维基说, XPath(XML路径语言)是一种用于从XML文
1回复

当它被埋在另一个标签中时,使用XPath获取文本,例如

以下 XPath 通常足以匹配文本包含特定字符串的所有锚点: 考虑到这样的情况: 文本被包裹在一个<strong> ,在锚点关闭之前还有一个<br> ,所以上面的 XPath 什么都不返回。 如何调整 XPath 以允许<a>包含附加标签,例如<strong
1回复

java:查找特定节点的绝对xpath

是否可以找到XML或XHTML文件的任何特定节点的xpath? 对于(例如) 如上所示,如果我只想在<a id="c">Here </a>行的xpath。 答案应该是:- /html/body/div/div[2]/a[@id="c"]有可能吗? 如果是,请提
2回复

Java和xpath-xHtml解析问题

我正在尝试分析格式正确的xhtml文档。 我在节点迭代期间遇到问题。 我的xHtml具有类似的结构 我需要的信息包含在(td)列中。 我想构造N个对象。 因此,每一行(tr)的列中都包含构造对象所需的信息。 我的class =“ AB”有1或2个div。 所以基本上我将拥
3回复

Xpath问题选择嵌套在

我正在尝试使用一个程序从大量 XHTML 文档中提取文本,该程序使用 Xpath 查询将文本映射到结构化表中。 XHTML 文档看起来像这样 我可以按它们的类选择跨度并检索文本/值,但是它们不够独特,我需要按表类进行过滤。 例如,只有来自跨类 ca-0的文本,它是td 类 td-3 c13的子类这
2回复

XPath或的简写(相同的查询,但是有多种标记类型)?

包含给定字符串的作业列表可能以<h2> , <h3>或<p> (通常)为标题。 我可以用| 逻辑或这些,以便我的XPath将检测所有情况: 这里有速记吗?
2回复

使用Xpath,查找包含ID=“userid”输入框的最叶表节点

我尝试了几种不同的变体,但似乎无法正确实现。 给定html像: 我想找到内部表。 我已经尝试过// // table / * / input [@ id ='foo'],但是我没有得到正确的东西-有人对我没有快速解决方案吗? :-) 非常感谢!