在<xsl:message>中显示XSLT变量失效问题咨询
问题描述
尝试使用<xsl:message select="$Direct">显示变量值时无法看到结果,变量$Direct定义如下:
<xsl:variable name="Direct"> <xsl:choose> <xsl:when test="substring(//E2EDK02[E2EDK02_QUALF='001'][1]/E2EDK02_BELNR, 1, 4)='4500'"> <xsl:text>0</xsl:text> </xsl:when> <xsl:when test="substring(//E2EDK02[E2EDK02_QUALF='001'][1]/E2EDK02_BELNR, 1, 2)='80'"> <xsl:text>0</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text>1</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:variable>
使用语句<xsl:message><xsl:value-of select="$Direct"/></xsl:message>无输出,但添加concat函数后<xsl:message><xsl:value-of select="concat('Direct Flag: ', $Direct)"/></xsl:message>可正常显示,请问原因是什么?
原因分析
- 变量
$Direct的类型是结果树片段(RTF):在XSLT 1.0中,当通过<xsl:variable>的子节点(而非select属性)定义变量时,变量的值是一个结果树片段,并非原生字符串类型。 - 直接使用
<xsl:value-of select="$Direct">的局限性:部分XSLT 1.0处理器对仅包含纯文本的结果树片段,直接做字符串转换时存在兼容性问题,导致没有输出内容。 concat函数的强制转换作用:concat函数要求所有参数必须是字符串类型,当传入结果树片段时,处理器会触发强制类型转换,将结果树片段可靠地转为字符串,因此能正常显示内容。
另外,你提供的代码里有个笔误:<xsl:value-of select="$Direct)"/>多了一个右括号,这也可能导致无输出,但核心原因还是结果树片段的类型处理问题。
内容的提问来源于stack exchange,提问作者Asolarski
相关产品推荐
相关产品推荐

