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

时间:2018-01-26 05:50:01

标签: php xpath screen-scraping descendant

在这里潜伏了很长时间,但我需要问这个问题。请原谅我的小说。

为某些抓取做一些PHP / Xpath编码,我想知道一个XPath表达式来选择父节点的父节点,它们的兄弟节点在它们的后代树中的某个地方包含一个具有特定文本值的节点。

假设节点类似于span [@ng =" league"]而且后代中的文本值是' SKT'我相信它应该在某种程度上包括 包含(text(),' SKT'),但我对其余部分不太确定。 TIA。

编辑:

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**

2 个答案:

答案 0 :(得分: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")]]

答案 1 :(得分:0)

以下XPath将返回span元素,其中//span[@ng="league" and .//text()[contains(., 'SKT')]] 中的任何位置包含至少一个包含子字符串'SKT'的文本节点:

private static IEnumerable<FileInfo[]> ReturnFile(DirectoryInfo[] dirList, string fileSearchPattern)

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