<xsl:choose>
<xsl:when test="type='LEVEL'">
<xsl:variable name="myVar" select = "value"/>
<xsl:variable name="spaces" select = "'            '"/>
<xsl:value-of select="substring($spaces, 1, $myVar)"/>
</xsl:when>
我用XSLT编写了上面的代码。myVar是一个值为(1或2或3)的变量。我需要将下面这行代码的输出存储在一个变量中,并在when条件之外使用它。
xsl:value-of select="substring($spaces, 1, $myVar)"/
我现在不能做这件事。谁有什么建议?
我不知道你想做什么,但你可以尝试以下。源XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Result>
<resultDetails>
<resultDetailsData>
<itemProperties>
<ID>1</ID>
<type>LEVEL</type>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:int">5</value>
</itemProperties>
</resultDetailsData>
</resultDetails>
</Result>
应用这个XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="itemProperties">
<xsl:variable name="fromOutputTemplate">
<xsl:call-template name="output"/>
</xsl:variable>
<out>
<xsl:value-of select="$fromOutputTemplate"/>
</out>
</xsl:template>
<xsl:template name="output">
<xsl:variable name="spaces" select = "'            '"/>
<xsl:variable name="myVar" select = "value"/>
<xsl:choose>
<xsl:when test="type='LEVEL'">
<xsl:value-of select="substring($spaces, 1, $myVar)"/>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
输出如下:
<?xml version="1.0" encoding="UTF-8"?>
<out> </out>
这是你想走的路吗?
你不能。您可以在when条件之外声明变量(即使某些xpath在其声明中失败并返回null),或者在when条件内使用输出。但是,如果您想要使用输出,为什么要使用choose呢?最后一次尝试,可以声明变量并在其序列构造函数中使用choose,如下所示:
<!-- You declare the 'tool' variables alone -->
<xsl:variable name="myVar" select = "value"/>
<xsl:variable name="spaces" select = "'            '"/>
<!-- For myVarSub you use a sequence constructor instead of the select way -->
<xsl:variable name="myVarSub">
<xsl:choose>
<xsl:when test="type='LEVEL'">
<!-- xsl:sequence create xml node -->
<xsl:sequence select="substring($spaces, 1, $myVar)"/>
</xsl:when>
<xsl:choose>
</xsl:variable>
之后,只需在需要时输出或使用该变量。如果不添加其他when条件,当测试为false时,myVar将为null。但是,请注意这是xslt 2.0解决方案,因为xsl:sequence。