这适用于 XPath 1.0。
这是我匹配的标记示例。元素的实际数量无法提前知道,因此会有所不同,但遵循这种模式:
<div class="entry">
<p><iframe /></p>
<p>Text 1</p>
<p>Text 2</p>
<p>Test 3</p>
<p><iframe /></p>
<p>
<a>Test 4</a>
<br />
<a>Test 5</a>
</p>
</div>
我试图匹配每个<p>
不包含 a 的,直到下一个包含a或直到封闭元素的结尾。<iframe>
<p>
<iframe>
<div>
为了使事情稍微复杂一些,出于特定原因,我需要使用 each<iframe>
作为基础,a la //div[@class='entry']//iframe
,以便每个节点集都基于
(//div[@class='entry']//iframe)[1]
(//div[@class='entry']//iframe)[2]
...
因此,在这种情况下,匹配
<p>Text 1</p>
<p>Text 2</p>
<p>Test 3</p>
和
<p>
<a>Test 4</a>
<br />
<a>Test 5</a>
</p>
分别。
我尝试了以下一些测试无济于事:
(//div[@class='entry']//iframe)/ancestor::p/following-sibling::p[preceding-sibling::p[iframe]]
(或用于测试):
(//div[@class='entry']//iframe)[1]/ancestor::p/following-sibling::p[preceding-sibling::p[iframe]]
(//div[@class='entry']//iframe)[2]/ancestor::p/following-sibling::p[preceding-sibling::p[iframe]]
以及其中的一些变体,但是对于第一组发生的事情是,它一直到最后都获得了所有<iframe>
-less元素,而不是在包含 a<p>
的下一个元素处停止。<p>
<iframe>
我已经有一段时间了,尽管我通常对这类事情很方便,但我不能完全按照自己的方式工作,而且谷歌等的搜索结果都没有帮助。
谢谢。任何帮助总是受到赞赏。
编辑:可以假设<div class="entry">
文档中只有一次出现。