XSLT: если проверить значение параметра - PullRequest
4 голосов
/ 10 мая 2011

Следующий код в 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>

Параметром стиля может быть либо «{StaticResource LabelText}», либо «{StaticResource ValueText}», и фон границы зависит от этого значения.

Однако, если структура терпит неудачу, она всегда рисует границу FF3B5940 в моем файле output.xaml. Я называю шаблон так:

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

Кто-нибудь видит, в чем может быть проблема? Спасибо.

Ответы [ 3 ]

7 голосов
/ 10 мая 2011

Строка:

<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>
4 голосов
/ 10 мая 2011

Если вы используете <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 голосов
/ 11 мая 2011

В XSLT 2.0:

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

</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...