使用xpath查找倒数第二个节点

Tim*_*Tim 7 xpath docbook xslt-1.0

我有一个带有chapters嵌套的XML文档sections.我试图找到第一个二级部分祖先的任何部分.这是ancestor-or-self轴中倒数第二个部分.伪代码:

<chapter><title>mychapter</title>
  <section><title>first</title>
     <section><title>second</title>
       <more/><stuff/>
     </section>
  </section>
</chapter>
Run Code Online (Sandbox Code Playgroud)

我的选择器:

<xsl:apply-templates 
    select="ancestor-or-self::section[last()-1]" mode="title.markup" />
Run Code Online (Sandbox Code Playgroud)

当然直到last() - 1没有定义(当前节点是first节).

如果当前节点低于该second部分,我想要标题second.否则我想要标题first.

Jas*_*ark 5

将你的 xpath 替换为:

ancestor-or-self::section[position()=last()-1 or count(ancestor::section)=0][1]
Run Code Online (Sandbox Code Playgroud)

由于您已经可以在除一个之外的所有情况下找到正确的节点,因此我更新了您的 xpath 以查找部分first( or count(ancestor::section)=0),然后选择 ( [1]) 第一个匹配项(按相反的文档顺序,因为我们使用的是ancestor-or-self轴)。