【问题标题】:Searching a particular text in DOM在 DOM 中搜索特定文本
【发布时间】:2012-12-24 11:55:54
【问题描述】:

我有一个 HTML/JSP 的 DOM,我想在 DOM 中搜索特定的文本,并且需要为包含该文本的元素构建 XPath。使用 Jsoup API.Building a xpath 工作正常

如果它是元素的值或元素的属性值,我可以搜索文本。假设 DOM 中有没有任何标签的文本,如果文本包含在 span 节点中,我该如何搜索?

【问题讨论】:

  • 旁注:这个问题与java有什么关系?
  • @smit 他正在使用jsoup.org。所以它必须是服务器端、Java 小程序或某种离线处理。

标签: java dom jsoup


【解决方案1】:

解决方案

有几种不同的解决方案。

jsoup 选择器

jsoup API 有一个实现pseudo-selectors 的Selector class。具体来说:

  • :contains(text)
  • :matches(regex)

这些将返回包含搜索文本的元素列表。您必须尝试查看它们是否返回父容器或确切的子容器,或某种组合。

jsoup 元素

Element class 有一些可能有用的方法:

这些方法允许检索包含给定文本或正则表达式模式的元素或父元素。

字符串转换

  1. 将 HTML 转换为字符串。
  2. 正常搜索文本元素(例如,正则表达式)。

这样做的缺点是,如果要匹配的字符串与属性的值或节点名称的值相同,则会返回误报。

资源

见String API;有用的函数可能是indexOf 和split。

请参阅Pattern API 了解构造正则表达式。

【讨论】:

  • 感谢 Dicarlo,通过正则表达式搜索文本会有所帮助。但是,如果我这样做,我将如何获得包含该文本的特定节点。构建 XPath 需要它
  • 假设您知道文本在哪里,您可以从文本中进行另一次搜索,以查找与 html 节点匹配的正则表达式上最接近的匹配项。但是,这似乎不是最好的路线,我对解析 html 的 java 库并不完全熟悉,但必须存在为您处理此功能的库。
  • 在阅读了一些 jsoup 之后,似乎您想要做的只是使用 JSoup API 获取 DOM 的所有元素,并在每个元素文本中搜索您要查找的文本。然后你就有了元素和文本。
  • 看来您还可以使用伪选择器:contains(text) 和:matches(regex) 分别查找包含text 或regex 的元素。见jsoup.org/apidocs/org/jsoup/select/Selector.html。
  • 感谢 Dicarlo 你给了我很好的指导,使用选择器我们也可以搜索文本,比如查询 DOM 中的 span 节点并检查它的文本值。
猜你喜欢
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 2013-03-18
  • 2017-08-28
相关资源
最近更新 更多