【问题标题】:Get sibling and following text of parent element with XPath使用 XPath 获取父元素的兄弟和后续文本
【发布时间】:2017-10-23 23:39:34
【问题描述】:

我有以下部分 HTML,我想从中获取最后一个
之后的所有内容,使用 - 在此示例中表示链接元素和 TEXT5。

<td>
  <span>
    <span>TEXT1</span>
  </span>
  <br>
  TEXT2
  <span>TEXT3</span>
  <br>
  <a href=...>TEXT4</a>
  TEXT5
<td>

用

获取链接元素比较容易
td/br[last()]/following-sibling::*

但是有没有办法获得 TEXT5 呢?

【问题讨论】:

  • 您可以捕获 中的所有文本,这将为您提供“TEXT1TEXT2TEXT3TEXT4TEXT5”,然后使用 gsub 删除从第一个字符到 TEXT4 的所有内容。例如,图书馆(tidvyverse)

标签: java java xpath


【解决方案1】:

正如您所观察到的,* 只返回元素,而您需要在此处返回元素节点和文本节点。您可以改用node() 这样做,这将返回任何类型的节点:

td/br[last()]/following-sibling::node()

如果您愿意,也可以更具体,例如,您可以添加谓词以将节点类型限制为 a 元素或文本节点:

td/br[last()]/following-sibling::node()[self::a|self::text()]

尽管 XPath 表达式本身有效,但有可能您的 Java API 不支持返回混合类型的节点,我不知道。

【讨论】:

  • node() 和 * 都返回文本元素 TEXT5,但是我的代码中有一个错误忽略了它。这是我在测试您的解决方案时发现的,因此我接受这是最佳答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多