XSLT在for-each

时间:2018-03-21 14:35:40

标签: xslt

如何在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步。

谢谢!

1 个答案:

答案 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>