【问题标题】:Using Xpath to select text with multiple empty sibling tags使用 Xpath 选择具有多个空同级标签的文本
【发布时间】:2019-03-12 21:21:41
【问题描述】:

我正在尝试编写一个 xpath 来获取以下标签的内部文本值,理想情况下我想使用 OR 语句,以便我可以让一个 xpath 选择文本:Pay付费 在这两种情况下。

案例一

<td>
<a class="btn btn-success">Pay</a>
<div class="display:none"></div>
<div class="display:none"></div>
<div class="display:none"></div>
<div class="display:none"></div>
<div class="display:none"></div>
</td>

案例2

<td>
<div class="display:none"></div>
<div class="display:none"></div>
<div class="display:none"></div>
<div class="display:none"></div>
Paid
<div class="display:none"></div>
</td>

我现在尝试采用的方法是首先尝试让 xpath 忽略所有 &lt;div class="display:none"&gt;&lt;/div&gt;,因为 xpath //td/text() 最终会拾取所有空的 div 标签。

我正在尝试这些方法来避免出现空标签:

//td::child[@text='Pay' OR @text='Paid']
//td/text()
//td::child[not(@class="display:none")]

这些 xpath 最终会被用来使用cheerio.js 提取数据,另一种我还没有研究过的方法是尝试迭代来自//td/text() 的结果

以前有人遇到过这种问题吗?

【问题讨论】:

  • 不清楚是要选择某个节点(元素或文本节点)还是只是获取某个字符串值。
  • 澄清我需要专门获取文本节点。我使用cheerio.js 来解析html 并提取文本值,而不是html 标记。

标签: jquery html xpath cheerio


【解决方案1】:

获取所有在 normalize-space 之后有任何内容的文本节点:

//text()[boolean(string-length(normalize-space(.)))]

upd:我的决定太过分了。查看@Alejandro 的评论

猜你喜欢
  • 2012-01-31
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
相关资源
最近更新 更多