XSLT变量不适用于xsl:value-of select =

时间:2019-01-08 18:44:08

标签: xml variables xslt

我正在使用某些XSLT,我创建了一个变量,该变量将在循环中使用,该变量将在循环时增加索引,因此$ index是变量。

这是我所拥有的:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">    
    <xsl:template match="/xml">
        <html>
            <head>
                <title><xsl:value-of select="module/name[@ID='SDCModule001']/title "/></title>
            </head>

            <body>
                <xsl:apply-templates select="module/name[@ID='SDCModule001']"/>                
            </body> 
        </html> 
    </xsl:template> 

    <xsl:template name="stepList" match="name">

        <xsl:param name="index" select="1" />
        <xsl:param name="total" select="numSteps" />

        <xsl:variable name="step" select="concat('step', $index)"/>
        <xsl:if test="not($index = $total)">
            <p><xsl:value-of select="step1" /><xsl:value-of select="$step" /></p>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

将信息放在页面(<p><xsl:value-of select="step1" /> - <xsl:value-of select="$step" /></p>)的段落中时,我得到:

执行此步骤1-步骤1

“执行此操作1”是从XML读取的内容,并且是正确的。我不确定<xsl:value-of select="$step" />为什么要带回“ step1”而不是“ Do this 1”,因为<xsl:value-of select="$step" />应该转换为<xsl:value-of select="step1" />

有什么提示我要去哪里吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

XSLT不是宏语言。

在宏语言中,变量保存表达式文本的片段,因此,如果$ x包含文本“删除文件'z'”,则评估$ x会导致文件被删除。

XSLT是一种传统的表达语言,其中变量保存值。评估包含文本“删除文件'z'”的变量只会返回该文本,不会导致任何文件被删除。同样,如果变量$ v1的值为“ $ v2”,则求值结果为字符串“ $ v2”,而不是变量$ v2的内容。