我有一个 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 测试。