0
<xsl:call-template name="myfield">              
                    <xsl:with-param name=A/>
                    <xsl:with-param name=B/>
                    <xsl:with-param name=C/>
                    <xsl:if test="not(starts-with(specialTest))">
                        <xsl:with-param name="TEST" select="'someFunction'"/>
                    </xsl:when>                     
                    <xsl:with-param name="D"/>              
                    <xsl:with-param name="E"/>                      
</xsl:call-template>    

この xsl スタイルシートを生成するときに xsl:when 条件を設定しようとしています。テスト条件が失敗した場合でも、他のパラメーター ABCDE が呼び出されるようにします。ただし、XSL コンパイラは、xsl:if を xsl:call-template の子にすることはできないと警告します。

XSL でネストできるものとネストできないものに関するアドバイス、または包括的な表はありますか?

4

2 に答える 2

2

W3C XSLT 仕様には、各要素の構文の概要があり、要素に含まれる可能性のある他の要素が示されています。たとえば、とxsl:chooseのみを含めることができます。のみを含めることができます。XSLT 2.0 が「シーケンス コンストラクター」と呼ぶものを含む多くの要素 (たとえばand and ) があります (XSLT 1.0 は正式に「テンプレート」と呼んでいますが、その意味でこの用語を使用する人はいません)。シーケンス コンストラクターは一連の命令であり、命令として分類される XSLT 要素のリストがあります (例: 、、など)。xsl:whenxsl:otherwisexsl:call-templatexsl:with-paramxsl:elementxsl:attributexsl:ifxsl:ifxsl:elementxsl:value-ofxsl:comment

したがって、ネストのルールは仕様にあります。

于 2012-06-11T20:34:58.880 に答える
1

<xsl:when><xsl:choose>要素内でのみ使用できますが、その中で使用できる唯一の要素<xsl:call-template>は です<xsl:with-param>

これを試してください(テストされていません)...

<xsl:call-template name="myfield">              
  <xsl:with-param name=A/>
  <xsl:with-param name=B/>
  <xsl:with-param name=C/>
  <xsl:with-param name="TEST">
    <xsl:if test="not(starts-with(specialTest))">your value</xsl:if>
  </xsl:with-param>
  <xsl:with-param name="D"/>              
  <xsl:with-param name="E"/>                      
</xsl:call-template>   

(また、あなたの例には先頭<xsl:if>があり、末尾<\xsl:when>があります...それは役に立ちません。)

于 2012-06-11T15:40:54.923 に答える