2015-06-17 3 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

Я использую версию 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

с использованием:

1

В XSLT 2.0 ваш код выглядит хорошо; в XSLT 1.0 он не смог бы сказать, что в выражении пути, таком как $v1/v2, значение $ v1 должно быть набором узлов, а не результирующим деревом-фрагментом. Большинство процессоров XSLT 1.0 позволяют обойти это ограничение, используя xx:node-set($v1)/v2, где xx привязан к некоторому suiutable пространству имен.

Версия XSLT зависит от того, какой процессор XSLT вы используете. Есть один или два процессора, которые запускают XSLT 1.0 или 2.0 в зависимости от того, что вы запрашиваете в атрибуте версии xsl: stylesheet, но процессор, написанный в XSLT 1.0 дней, не знает, как обрабатывать XSLT 2.0 и большинство процессоров XSLT 2.0 если они видят, что version = "1.0" в таблице стилей будет запускать XSLT 2.0 в режиме обратной совместимости, что не накладывает всех ограничений XSLT 1.0 (например, ограничение результирующего дерева), оно просто приводит к некоторым конструкциям путь 1.0 (например, xsl: value-of будет выводить только первый узел в последовательности узлов).

Было бы намного проще помочь вам, если бы вы сказали нам, что выводит ваш код.

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