将值放入变量并在XSLT中使用它

  • 本文关键字:XSLT 变量 xml xslt xslt-1.0
  • 更新时间 :
  • 英文 :

<xsl:choose>
  <xsl:when test="type='LEVEL'">
    <xsl:variable name="myVar" select = "value"/>
      <xsl:variable name="spaces" select = "'&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0'"/>
      <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 = "'&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;'"/>
    <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 = "'&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0'"/>
<!-- 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。

相关内容

  • 没有找到相关文章

最新更新