给定以下XML,我想选择“第一个标题”和“第二个标题”之间的每个潜在元素,但不包括这些标题元素。
我不确定我可以使用哪个版本的XSLT(我正在修改专有应用程序运行的工作表...)
<body>
<h1 class="heading1">Some title</h1>
<p class="bodytext">Some text.</p>
<p class="sectiontitle">First heading</p>
<p class="bodytext">Want that.</p>
<div>
<p class="bodytext">Want that too!</p>
</div>
<p class="sectiontitle">Second heading</p>
<p class="bodytext">Some text</p>
<p class="sectiontitle">Third heading</p>
...
</body>
预期:
<p class="bodytext">Want that.</p>
<div>
<p class="bodytext">Want that too!</p>
<div>
我知道
p class="sectiontitle">First heading</p>
:将始终属于
sectiontitle
类。将始终包含
First heading
。不必是此类的第一p,其位置未知。
现在我也要找到
<p class="sectiontitle">Could be any title</p>
就停止(所以仅基于类)我已经看到过其他类似的帖子,关于这种问题,我仍然无法解决我的问题...
我尝试过的方法包括:
//*[(preceding-sibling::p/text()="First heading") and (not(following-sibling::p[@class="sectiontitle"]))]
最佳答案
您可以使用以下XPath表达式(已更新以避免选择第二个sectiontitle
元素):
//p[@class='sectiontitle' and .='First heading']
/following-sibling::*[
preceding-sibling::p[@class='sectiontitle'][1] = 'First heading'
and not(self::p/@class = 'sectiontitle')
]
基本上,XPath返回
following-sibling
元素的First Heading
元素,其中最接近的前一个兄弟'sectiontitle'
是First Heading
元素本身。关于xslt - XSLT-选择给定标签的所有同级,直到另一个标签(再次),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36548256/