XSLT变量没有任何返回值

时间:2019-05-22 13:12:40

标签: xml xslt xslt-1.0 xslt-2.0

我声明了2个变量,并用选择填充它们。在那之后,我想用ifs检查它们,但是我只遇到两个错误,我不知道它们从哪里来。

我试图更改if语句,但无济于事。

        <root>
            <xsl:choose>
                <xsl:when test="Request/Query/Parameter = 'DateiPfad'">
                    <xsl:variable name="Con1">
                        2001
                    </xsl:variable>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:variable name="Con1">
                        2000
                    </xsl:variable>
                </xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
                <xsl:when test="Request/Query/Parameter = 'DateiName'">
                    <xsl:variable name="Con2">
                        2001
                    </xsl:variable>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:variable name="Con2">
                        2000
                    </xsl:variable>
                </xsl:otherwise>
            </xsl:choose>
            <xsl:if test="$Con1 == 2001 and $Con2 == 2001">
            <xsl:processing-instruction name="ConditionState">
                    2001
                </xsl:processing-instruction>
            </xsl:if>
            <xsl:if test="$Con1 == 2000 and $Con2 == 2000">
                <xsl:processing-instruction name="ConditionState">
                    2000
                </xsl:processing-instruction>
            </xsl:if>
        </root>

我希望IF结果会给我2000或2001作为我在过程中需要的条件状态...

1 个答案:

答案 0 :(得分:0)

变量的作用域仅限于声明它们的块,这意味着在您的情况下,它们仅存在于xsl:when(和xsl:otherwise)块中,并且在该变量之外不可访问。

您可以将xsl:choose放在xsl:variable

<xsl:template match="/">
    <root>
        <xsl:variable name="Con1">
            <xsl:choose>
                <xsl:when test="Request/Query/Parameter = 'DateiPfad'">2001</xsl:when>
                <xsl:otherwise>2000</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="Con2">
            <xsl:choose>
                <xsl:when test="Request/Query/Parameter = 'DateiName'">2001</xsl:when>
                <xsl:otherwise>2000</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:if test="$Con1 = 2001 and $Con2 = 2001">
            <xsl:processing-instruction name="ConditionState">
                2001
            </xsl:processing-instruction>
        </xsl:if>
        <xsl:if test="$Con1 = 2000 and $Con2 = 2000">
            <xsl:processing-instruction name="ConditionState">
                2000
            </xsl:processing-instruction>
        </xsl:if>
    </root>
</xsl:template>   

当然,在您显示的示例中,您根本不需要xsl:variable ...

<xsl:template match="/">
    <root>
        <xsl:if test="Request/Query/Parameter = 'DateiPfad' and Request/Query/Parameter = 'DateiName'">
            <xsl:processing-instruction name="ConditionState">
                2001
            </xsl:processing-instruction>
        </xsl:if>
        <xsl:if test="not(Request/Query/Parameter = 'DateiPfad') and not(Request/Query/Parameter = 'DateiName')">
            <xsl:processing-instruction name="ConditionState">
                2000
            </xsl:processing-instruction>
        </xsl:if>
    </root>
</xsl:template>