2012-04-08 101 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