为什么我不能将参数传递给xslt中的调用模板?

时间:2015-03-24 02:53:39

标签: c# xml xslt

我正在尝试将参数传递给<xsl:call-template>

基本上是(languageTemp)的值 <xsl:param name="selectedBox">languageTemp</xsl:param>我希望被传递到

<xsl:call-template name="$selectedBox" />

但它不起作用。它会在我手动输入时工作,但我的c#应用程序将从组合框中传递参数。所以它必须是动态的。我是否滥用参数和调用模板?

以下是我的XSLT代码的一部分。

<xsl:param name="selectedLanguage">Java</xsl:param>
    <xsl:param name="selectedUse">Application</xsl:param>
    <xsl:param name="selectedStandard">ECMA</xsl:param>
    <xsl:param name="selectedBox">languageTemp</xsl:param>

    <xsl:key name="language-by-use" match="language" use="purpose/intendedUse/@id" />
    <xsl:key name="language-by-standard" match="language" use="standards/standard/@id" />

    <xsl:template match="/">
        <xsl:call-template name="$selectedBox"/>
    </xsl:template>

1 个答案:

答案 0 :(得分:0)

感谢@MartinHonnen的建议。

这是我使用的灵魂,而不是直接将参数传递给调用模板,我使用select,when语句在某些条件下调用模板。它与我的C#应用​​程序一起使用,从应用程序传递参数!

<?xml version="1.0"?><!-- DWXMLSource="lab06.xml" -->
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >    

    <xsl:param name="selectedLanguage">Java</xsl:param>
    <xsl:param name="selectedUse">Application</xsl:param>
    <xsl:param name="selectedStandard">ECMA</xsl:param>
    <xsl:param name="selectedBox">intendedUseTemp</xsl:param>

    <xsl:key name="language-by-use" match="language" use="purpose/intendedUse/@id" />
    <xsl:key name="language-by-standard" match="language" use="standards/standard/@id" />





    <xsl:template match="/">

    <xsl:choose>
    <xsl:when test="$selectedBox = 'languageTemp'">
        <xsl:call-template name="languageTemp" />
    </xsl:when>
    <xsl:when test="$selectedBox = 'intendedUseTemp'">
        <xsl:call-template name="intendedUseTemp" />
    </xsl:when>
    <xsl:when test="$selectedBox = 'standardTemp'">
        <xsl:call-template name="standardTemp" />
    </xsl:when>
    </xsl:choose>
    </xsl:template>