1

私の作業中のxsltでは、いくつかのファイルに次のようなシナリオがあります

<xsl:template name="content">
 <xsl:param name="request" as="node()" select="doc('')"/>
    <div class="main-group">
      <div class="main container" id="main_content">

        something goes here..

      </div>
    </div>
  </xsl:template> 

一部の xslt では、このテンプレートにパラメーター 'request' が含まれる場合があり、一部の xslt では、次のように含まれない場合があります。

<xsl:template name="content">
     <!--param missing here-->
        <div class="main-group">
          <div class="main container" id="main_content">

            something goes here..

          </div>
        </div>
</xsl:template>

したがって、どちらの場合も、問題なくこのテンプレート [name="content"] を呼び出す必要があります。

私は次のように使用しました:

 <xsl:apply-templates select="content">
     <xsl:with-param name="request" select="$request"/>
 </xsl:apply-templates>
 <xsl:call-template name="content"/>

私の目的は、テンプレートに「request」という名前のパラメーターがある場合でも、「request」というパラメーターがない場合でも、問題なく「content」という名前のテンプレートを呼び出すことです

これでいいですか?これがバグであるかどうかはわかりますか?

4

1 に答える 1

1

XSLT 2.0 では、(トンネル以外の) パラメータを、そのパラメータを宣言していないテンプレートに渡そうとするとエラーになります。call-template

XSLT 1.0 ではエラーではありませんでした。その場合、宣言されていないパラメーターは単純に無視されます。

宣言されていないトンネルパラメータをに渡すことはエラーではないため、これが問題を回避する 1 つの方法である可能性があります。呼び出し内の と (存在する場合)テンプレート内のの両方で使用します。ただし、トンネル パラメータがどのように機能するかを理解し、スタイルシートの他の場所で他の問題が発生しないことを確認してください。call-templatetunnel="yes"with-paramparam

于 2013-11-11T12:44:03.220 に答える