2012-04-08 2 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-кодом, который по этой причине не будет переходить между процессорами. –

Смежные вопросы