【问题标题】:How to find direct children which contain nodes with specified text with xpath?如何使用xpath查找包含具有指定文本的节点的直接子节点?
【发布时间】:2018-04-27 09:41:19
【问题描述】:

我需要提取所有具有一些文本节点的子节点。 html结构可能如下:

<div>
  <div>
    A
  </div>
  <p>
    <b>A</b>
  </p>
  <span>
    B
  </span>
</div>

我需要提取具有“A”文本的子节点。它应该返回divp 节点

我尝试了以下 xpath:

./*/*[contains(text(), 'A')]
./*/*[./*[contains(text(), 'A')]]

但第一个仅返回带有“A”文本的 div,第二个仅返回带有“A”文本的 p

是否可以构造返回两个孩子的 xpath?

包含“A”文本的节点可能位于子节点中的任何级别

【问题讨论】:

    标签: xpath nokogiri


    【解决方案1】:

    如果您需要返回两个子节点的 XPath,请尝试使用

    ./*/*[contains(., "A")]
    

    【讨论】:

    • 我发现 ./*/*[contains(text(), 'A') or .//*[contains(text(), 'A')]] 也可以,但你看起来好多了
    【解决方案2】:

    我怀疑 contains() 在这里是错误的,除非你真的想选择一个值为“HAT”的节点以及一个值为“A”的节点。

    试试

    */*[normalize-space(.)='A']
    

    【讨论】:

    • 我也想选择值为 HAT 的节点。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2016-02-04
    • 2014-10-02
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多