将字符串连接到xslt中的变量时出错

时间:2015-02-03 06:03:02

标签: xml xslt

请帮助我使用此代码,它会错误地显示"太多项目"在第3行:

<xsl:when test=".[@name='Measurement Pallete']">
    <xsl:variable name="controlID" select=".[@name='Measurement Pallete']/Control/@id"/>
    <xsl:variable name="control_ID" select="translate($controlID, ' ', '')"/>
    <xsl:variable name="funcName" select="concat('ClassicTab', $control_ID)"/>              
</xsl:when>

输入Xml的格式为

<window name="">
    <Control id="" type=""/>
    <Control id="" type=""/>
</window>

我希望变量funcname能够连接&#34; HomeTab&#34;在每个Control的名称之前,窗口名称为&#34; Measurement Pallete&#34;

完整样式表

<xsl:template match="/">
        <xsl:for-each select="//window">
            <xsl:result-document href="{concat('Windows/', @id,  '.cs')}">
                <xsl:choose>
                    <xsl:when test="current()[@name='Measurement Pallete']">
                        <xsl:variable name="controlID" select="current()[@name='Measurement Pallete']/Control/@id"/>
                        <xsl:variable name="control_ID" select="translate($controlID, ' ', '')"/>
                        <xsl:variable name="funcName" select="concat('ClassicTab', $control_ID)"/>
                        <xsl:call-template name="csfile1">
                            <xsl:with-param name="func_name" select="$funcName"/>
                        </xsl:call-template>
                        <xsl:call-template name="automationIDs1">
                            <xsl:with-param name="func_name" select="$funcName"/>
                        </xsl:call-template>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:call-template name="csfile"/>
                        <xsl:call-template name="automationIDs"/>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:result-document>
        </xsl:for-each>
    </xsl:template>

1 个答案:

答案 0 :(得分:1)

这是因为$controlID会发出2个值(我假设这是xsl 2.0,因为xsl:result-document),Control[1]/@idControl[2]/@id,错误来自

<xsl:variable name="control_ID" select="translate($controlID, ' ', '')"/>

因为您不能将多个序列作为translate的第一个参数。