Xpath 查询查找其后代包含特定文本的节点

问题描述 投票:0回答:2

为一些抓取进行一些 PHP/Xpath 编码,我想知道一个 XPath 表达式来选择具有父级的节点,其父级的兄弟节点(在其后代树中的某个位置)包含具有特定文本值的节点。

假设节点类似于 span[@ng="league"] 并且后代中某处的文本值是“SKT”,我相信它应该以某种方式包括 contains(text(), 'SKT'),但我不太确定其余的。短暂性脑缺血发作。

I've tried to create a diagram of the situation here

|
+[parent]
|    |
|   [the node I want]
|     
+[sibling of "parent" node seen above]
|   |
|   *
|   |
|   +---[specific text, found with previous xpath query]
|
etc
php xpath screen-scraping descendant
2个回答
3
投票

以下 XPath 将返回

span[@ng="league"]
元素,其中
span
中的任意位置至少有一个包含子字符串“SKT”的文本节点:

//span[@ng="league" and .//text()[contains(., 'SKT')]]

如果这不起作用,那么您需要更具体,即发布最小的 HTML/XML 示例(格式化文本,而不是图像),其中上面的 XPath 不会返回所需的输出


1
投票

如果你的 xml 是这样的

<parent>
  <span ng="league">The node you want </span>
</parent>
<any>
    <any2>
       <any3>SKT</any3>
   </any2>
</any>

你可以使用这样的xpath

//span[@ng="league"][../following-sibling::*[contains(., "SKT")]]
© www.soinside.com 2019 - 2024. All rights reserved.