如何选择不包含链接但使用xpath包含特定文本的节点

时间:2016-08-21 10:01:40

标签: xpath

给出以下HTML:

$content = 
'<html>
 <body>
  <div>
   <p>During the interim there shall be nourishment supplied</p>
  </div>
  <div>
   <p>During the <a href="#">interim</a> there shall be interim nourishment supplied</p>
  </div>
  <div>
   <ul><li>During the interim there shall be nourishment supplied</li></ul>
  </div>
 </body>
</html>';

我想要包含单词“interim”的所有节点,但是如果单词“interim”是链接元素的一部分则不是。

我期望的节点只是第一个P节点和LI节点。

我尝试了以下内容:

'//*/text()[not(a) and contains(.,"interim")]'

...但是这仍然返回A并且还返回它的父P节点(A之后的部分)的一部分,这两者都不是所希望的。你可以在这里看到我的尝试:https://glot.io/snippets/ehp7hmmglm

1 个答案:

答案 0 :(得分:1)

如果您使用XPath表达式//*[not(self::a) and not(a) and text()[contains(.,"interim")]],那么您将获得所有不包含a元素的元素,不是a元素,并且包含包含该单词的文本节点子元素。< / p>