给定以下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/

10-12 14:00