XSLT:如果检查参数值

时间:2011-05-10 19:36:59

标签: xslt

关注xslt中的代码(我删除了不相关的部分,get-textblock更长,并且有很多参数都正确传递):

<xsl:template name="get-textblock">
        <xsl:param name="style"/>

        <xsl:element name="Border">         
            <xsl:if test="$style='{StaticResource LabelText}'" >
                <xsl:attribute name="Background">#FF3B596E</xsl:attribute>
            </xsl:if>
            <xsl:attribute name="Background">#FF3B5940</xsl:attribute>              
        </xsl:element>

</xsl:template>

style参数可以是'{StaticResource LabelText}'或'{StaticResource ValueText}',边框的背景取决于该值。

但是,如果结构失败,它总是在我的output.xaml文件中绘制FF3B5940边框。 我这样称呼模板:

<xsl:call-template name="get-textblock">
    <xsl:with-param name="style">{StaticResource LabelText}</xsl:with-param>                    
</xsl:call-template>

任何人都会看到可能出现的问题?感谢。

3 个答案:

答案 0 :(得分:7)

该行:

<xsl:attribute name="Background">#FF3B5940</xsl:attribute>

不受条件检查的保护,因此它将始终执行。

使用此:

<xsl:if test="$style='{StaticResource LabelText}'">
    <xsl:attribute name="Background">#FF3B596E</xsl:attribute>
</xsl:if>
<xsl:if test="not($style='{StaticResource LabelText}')">
    <xsl:attribute name="Background">#FF3B5940</xsl:attribute>
</xsl:if>

xsl:choose

<xsl:choose>
    <xsl:when test="$style='{StaticResource LabelText}'">
        <xsl:attribute name="Background">#FF3B596E</xsl:attribute>
    </xsl:when>
    <xsl:otherwise>
        <xsl:attribute name="Background">#FF3B5940</xsl:attribute>
    </xsl:otherwise>
</xsl:choose>

答案 1 :(得分:4)

如果在一个元素上下文中多次使用<xsl:attribute/>,则只有最后一个将应用于结果元素。

您可以使用<xsl:attribute/>分隔<xsl:choose/>个说明,或者在<xsl:attribute/>之前定义一个<xsl:if/> - 默认情况下会使用它:

<xsl:choose>
    <xsl:when test="$style='{StaticResource LabelText}'">
        <xsl:attribute name="Background">#FF3B596E</xsl:attribute>
    </xsl:when>
    <xsl:otherwise>
        <xsl:attribute name="Background">#FF3B5940</xsl:attribute>
    </xsl:otherwise>
</xsl:choose>

        <xsl:attribute name="Background">#FF3B5940</xsl:attribute>  
        <xsl:if test="$style='{StaticResource LabelText}'" >
            <xsl:attribute name="Background">#FF3B596E</xsl:attribute>
        </xsl:if>

答案 2 :(得分:2)

在XSLT 2.0中:

<xsl:template name="get-textblock">
   <xsl:param name="style"/>   
   <Border Background="{if ($style='{StaticResource LabelText}') 
                        then '#FF3B596E' 
                        else '#FF3B5940'}"/>         

</xsl:template>