2012-04-08 59 views
1

看起来xsl:变量未在libxml2中的谓词中定义。 是否有可能或者我错过了什么?如果我使用谓词中的变量,那么它很好。xsl:变量未在谓词中定义

<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" /> 
    <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> 

    <xsl:template match="*[translate(name(), $uppercase, $smallcase) = 'receipt']"> 
     <xsl:apply-templates select="Process"/> 
     <xsl:apply-templates select="Encode"/> 
    </xsl:template> 

回答

1

是在XSLT 1.0,您不能使用变量匹配属性里面,但我相信在XSLT 2.0就可以了。

也许你可以做这样的事情,而不是:(注意,这可能不适合你原来的样子,这取决于如何您的XSL的其余部分被写入)

<xsl:template match="*"> 
    <xsl:choose> 
     <xsl:when test="translate(name(.), $uppercase, $smallcase) = 'receipt'"> 
      <xsl:apply-templates select="Process"/> 
      <xsl:apply-templates select="Encode"/> 
     </xsl:when> 
     <xsl:otherwise> 
      <!-- do whatever else should be done --> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
+1

正确的答案,但它可能值得注意的是,尽管XSLT 1.0规范不允许在匹配模式中使用变量引用,但某些XSLT 1.0处理器不会强制执行此限制 - 这意味着您可能会遇到不会在处理器之间移植的XSLT代码。 – 2012-04-08 22:56:41