2015-06-17 19 views
1

任何人请告诉下面的代码有什么问题, 我无法创建嵌套变量,即格式为$ v1/v2。 但我相信这些格式应该工作。XSLT中嵌套标记的变量声明

<xsl:variable name="n" select="100"/> 
<xsl:variable name="v1"> 
    <v2> 
     <xsl:value-of select="$n"></xsl:value-of> 
    </v2> 
</xsl:variable> 

<xsl:if test="$v1/v2"> 
    <message:output> 
     <xsl:value-of select="$v1/v2"/> 
    </message:output> 
</xsl:if> 
+0

XSLT1或XSLT2?答案是大不相同的两个 –

+0

我使用If语句为: 0”> –

+0

我正在使用XSLT2版本 –

回答

0

我有点困惑在这里,当我检查使用<xsl:value-of select="system-property('xsl:version')" />版本它给了我作为输出。

但在我的样式表标签它被提及为1.0,所以下面的代码不起作用。

当我将版本更改为2.0时:<xsl:stylesheet version="2.0" 相同的代码开始工作。

<xsl:template match="/"> 
    <message:ExecuteSubProcessResponse> 
     <xsl:variable name="n" select="100"/> 
     <xsl:variable name="v1"> 
     <v2> 
      <xsl:value-of select="$n"></xsl:value-of> 
     </v2> 
     </xsl:variable> 
     <xsl:choose> 
     <xsl:when test="count($v1/v2)> 0"> 
     <message:BIMStatus> 
      <xsl:text disable-output-escaping="no">ELIGIBLE</xsl:text> 
     </message:BIMStatus> 
     </xsl:when> 
     <xsl:otherwise> 
     <message:BIMStatus> 
      <xsl:value-of select="$v1/v2"/> 
     </message:BIMStatus> 
     </xsl:otherwise>  
     </xsl:choose> 
    </message:ExecuteSubProcessResponse> 
    </xsl:template> 
+0

using:

1

在XSLT 2.0中,您的代码看起来很好;在XSLT 1.0中,它会失败,说在诸如$v1/v2的路径表达式中,$ v1的值必须是节点集而不是结果树片段。大多数XSLT 1.0处理器允许您通过使用xx:node-set($v1)/v2来解决此限制,其中xx绑定到某些可用的命名空间。

XSLT的版本取决于您使用的XSLT处理器。有一个或两个处理器运行XSLT 1.0或2.0,具体取决于您在xsl:stylesheet版本属性中要求的内容,但用XSLT 1.0版编写的处理器不知道如何处理XSLT 2.0以及大多数XSLT 2.0处理器如果他们在样式表中看到版本=“1.0”,将以“向后兼容模式”运行XSLT 2.0,而XSLT 2.0并没有强加XSLT 1.0的所有限制(如结果树分段限制),它仅仅使一些构造行为1.0方式(例如,xsl:value-of将仅输出节点序列中的第一个节点)。

如果您告诉我们您的代码输出的内容会更容易帮助您。