如何在for-each
循环中引用模板匹配的当前节点。
<xsl:template match="product[@category='foo']">
<count>
<xsl:for-each select="preceding::product">
<current>
<xsl:value-of select="count(current()/preceding::product)"/>
</current>
<context>
<xsl:value-of select="count(./preceding::product)"/>
</context>
</xsl:for-each>
</count>
</xsl:template>
两个count()
函数都会返回与.
以及current()
相同的结果。
有没有办法引用模板的匹配节点,以便计算它的所有前面的节点,以便count()
内的<current/>
函数的结果是相同的每for-each
步。
谢谢!
答案 0 :(得分:3)
将当前节点放在变量....
<xsl:template match="product[@category='foo']">
<xsl:variable name="current" select="." />
<count>
<xsl:for-each select="preceding::product">
<current>
<xsl:value-of select="count($current/preceding::product)"/>
</current>
<context>
<xsl:value-of select="count(./preceding::product)"/>
</context>
</xsl:for-each>
</count>
</xsl:template>
在这个例子中,你最好把计数结果放在变量中......
将当前节点放在变量....
<xsl:template match="product[@category='foo']">
<xsl:variable name="count" select="count(preceding::product)" />
<count>
<xsl:for-each select="preceding::product">
<current>
<xsl:value-of select="$count"/>
</current>
<context>
<xsl:value-of select="count(./preceding::product)"/>
</context>
</xsl:for-each>
</count>
</xsl:template>