在包含通过Xpath的字符串的节点之前选择节点

时间:2014-06-04 09:52:24

标签: xpath

假设我有以下XML。我想在包含文本MAGIC的节点之前选择除其父节点之外的所有节点。 (因为我稍后会删除它们)

<body>
<div>//Should NOT be selected
   <div>some</div> 
   <div>  //Should NOT be selected
      <p>sth</p>  
      <hr /> 
      <br /> 
      <p>some not important MAGIC text</p>
   </div>
</div>
</body>

2 个答案:

答案 0 :(得分:0)

考虑这个XPath:

//*[following::*[contains(., 'MAGIC')]]
如果包含文本MAGIC的节点始终是<p>元素,则

或此项:

//*[following::p[contains(., 'MAGIC')]]

在这个问题中给出html输入,当我使用在线XPath测试器测试时的输出如下:

Element='<div>some</div>'
Element='<p>sth</p>'
Element='<hr />'
Element='<br />'

答案 1 :(得分:0)

你应该使用

//*[following-sibling::*[contains(text(), 'MAGIC')]]

har07's answer相比,这只会查找直接包含魔术文本的元素,并选择兄弟而不是所有元素,无论嵌套级别如何。

您也可以反转选择器:

//*[contains(text(), 'MAGIC')]/preceding-sibling::*
相关问题