我有一个xml文档,其中的部分大致如下:
<a>
<b></b>
<b>Previous</b>
<b></b>
...
</a>
<a>
<b></b>
<b>Current</b>
<b></b>
...
</a>
...
我的xsl中有以下部分:
<xsl:template match="/">
<xsl:apply-templates select="//a"/>
</xsl:template>
<xsl:template match="//a">
<xsl:for-each select="./b[text() != ???]">
...
</xsl:for-each>
</xsl:template>
我需要???选择与当前“c”位于同一位置(在其父“a”元素内)但在前一个“a”元素中的“c”元素(示例对在xml源中标记为Current和Previous )。
本质上,这需要将for-each循环的position()传递给它自己的select语句。这听起来有点不可能 - 因为select语句只被评估一次。
现在可以从for-each循环中传递position()并将其保存到一个变量中,然后可以在if语句中使用该变量。但是,我想知道最后一次迭代发生的时间。如果我使用if语句,则会破坏last()的含义 - 如果最后一次迭代失败了if测试。
答案 0 :(得分:0)
试试这个:
<xsl:for-each select="/b[ text() != ../../preceding-sibling::a/b[position(.)] ]" >
previous-sibling :: axis选择当前步骤之前的节点