xslt не может назначить параметр с логическим значением в `<xsl: choose>` - PullRequest
2 голосов
/ 09 июня 2011

этот код дает мне вывод test, когда ожидаемый вывод должен быть ничем ..

Что-то не так с моим процессором XSLT или ..? :

    <xsl:template match="/">

         <xsl:param name="IsTextArea">
     <xsl:choose>
        <xsl:when test="false()">
           <xsl:value-of select="true()"/>
        </xsl:when>
        <xsl:otherwise>
           <xsl:value-of select="false()"/>
        </xsl:otherwise>
     </xsl:choose>
  </xsl:param>

  <html>

   <xsl:choose>
   <xsl:when test="$IsTextArea">test
   </xsl:when>
   </xsl:choose>


  </html>
    </xsl:template>

Кстати, мне нужно решение для raw XSLT 1.0 (без расширений и тому подобного).

Можно ли установить логический параметр для param в XSLT 1.0?

Ответы [ 3 ]

3 голосов
/ 09 июня 2011

Ваш параметр оценивается в строку.Вы должны использовать:

    <html>
        <xsl:choose>
            <xsl:when test="$IsTextArea = 'true'">
                test
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$IsTextArea"/>
            </xsl:otherwise>
        </xsl:choose>
    </html>
2 голосов
/ 09 июня 2011

Инструкция xsl: value-of преобразует все, что вы ей даете, в строку. Таким образом, true () становится «истинным», а false () становится «ложным». Когда вы используете строку в логическом контексте, любая непустая строка становится истинной (), а "" становится ложной (). Так что boolean-> string-> boolean преобразование не происходит в оба конца. В XSLT 2.0 ответ заключается в использовании xsl: sequence вместо xsl: value-of; в версии 1.0 просто используйте строки типа «да» и «нет», чтобы избежать путаницы.

0 голосов
/ 09 июня 2011

Разве это не должно быть так:

<xsl:param name="IsTextArea">
 <xsl:choose>
    <xsl:when test="false()">
       <xsl:value-of select="false()"/>
    </xsl:when>
    <xsl:otherwise>
       <xsl:value-of select="true()"/>
    </xsl:otherwise>
 </xsl:choose>

Считаете ли вы, что ваши истина и ложь были неуместны.

...