假设我有以下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>
答案 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::*