xsl:if-expression不起作用

时间:2014-06-18 17:19:37

标签: xslt xpath conditional-statements xslt-2.0

我有以下结构:

<root>
    <elements>
        <element>
            <key>1</key>
            <key2>10</key2>
        </element>
        <element>
            <key>2</key>
            <key2>100</key2>
        </element>  
    </elements>
</root>

我想创建一个

<newelement></newelement>

例如,key的值为2key2的值不是''

为了选择元素,这个XPath可以很好地工作:

/root/elements/element/key[text() = '2']/../key2[text() != '']

但当我将其加入xsl:if时,转换将无法创建我想要的newelement

<xsl:if test="/root/elements/element/key[text() = '2']/../key2 != ''">
    <newelement></newelement>
</xsl:if>

我错过了什么?

1 个答案:

答案 0 :(得分:0)

<root>
<elements>
     <element>
        <key>2</key>
        <key2>100</key2>
    </element>  
    <element>
        <key>2</key>
        <key2></key2>
    </element> 
</elements>
</root>

XSLT代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="elements">
    <root>
        <xsl:apply-templates/>
    </root>
</xsl:template>
<xsl:template match="element">
    <xsl:variable name="valueKey2" select="key2"/>
    <xsl:variable name="nameKey2" select="key2/name()"/>
    <xsl:if test="key[text() = '2'] and $valueKey2 != ''">
        <newelement>
            <!--use key2 as attribute of <newelement>-->
            <xsl:attribute name="{$nameKey2}"><xsl:value-of select="$valueKey2"/></xsl:attribute>
            <!--use key2 inside <newelemnt>-->
            <xsl:value-of select="$valueKey2"/>
        </newelement>
    </xsl:if>
</xsl:template>
</xsl:stylesheet>