2

このコードは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>

ところで、私は生のXSLT 1.0のソリューションが必要です(拡張機能などはありません)。

paramXSLT 1.0でaのブールパラメータを設定することは可能ですか?

4

3 に答える 3

4

パラメータは文字列に評価されています。次を使用する必要があります。

    <html>
        <xsl:choose>
            <xsl:when test="$IsTextArea = 'true'">
                test
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$IsTextArea"/>
            </xsl:otherwise>
        </xsl:choose>
    </html>
于 2011-06-09T09:11:38.683 に答える
3

xsl:value-of命令は、指定したものを文字列に変換します。したがって、true()は「true」になり、false()は「false」になります。ブールコンテキストで文字列を使用すると、空でない文字列はtrue()になり、 ""はfalse()になります。したがって、boolean->string->boolean変換はラウンドトリップしません。XSLT 2.0では、答えはxsl:value-of;の代わりにxsl:sequenceを使用することです。1.0では、混乱を避けるために「yes」や「no」などの文字列を使用してください。

于 2011-06-09T11:16:56.683 に答える
0

このようにすべきではありません:

<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>

あなたの真と偽は場違いだったと思いますか。

于 2011-06-09T09:15:06.170 に答える