0

XSLT スタイルシートをインポートしたいのですが、基本的にはデフォルトで無視し、呼び出されたときにのみテンプレートを使用するようにします。

私たちのコンテンツにはカスタム XML + DocBook スタイルのテーブルが含まれているため、現在、XML => my.xsl => docbook.xsl => XHTML の 2 つの XSLT によって変換されています。my.xsl からこれをすべて行うことは可能ですか?

<!-- My XML -->
<xsl:template match="a"/>
<xsl:template match="b"/>
<xsl:template match="c"/>

<!-- DocBook XML -->
<xsl:template match="table">
  <xsl:apply-templates select="." mode="docbook"/>
</xsl:template>

docbook.xsl スタイルシートをインポートする際の問題は、既存のテンプレートに干渉する他の多くのテンプレートが含まれていることです。理想的には、docbook.xsl を指定されたモードにインポートする方法がありますが、それは不可能です。docbook.xsl を変更せずにこれを行う方法はありますか?

4

2 に答える 2

2

メイン スタイルシートのテンプレートは、インポートされたスタイルシートのテンプレートより常に優先度が高くなります。インポートされたテンプレートの呼び出しを回避するには、必要な状況でメインでオーバーライドするだけです。

これは、推奨される手法です。別の方法は次のとおりです。

  1. 競合の可能性がある一致パターンを特定します。
  2. モードを使用して、2 つを区別します。
  3. 識別された重複パターンの 1 つに適合する選択で <xsl:apply-templates> を使用してテンプレートを呼び出す場合は、適切なモード (またはモードなし) を使用して、意図した結果 (メイン テンプレートとインポートされたテンプレート) を実現します。
于 2012-07-24T01:16:13.880 に答える
1

モードを使用します。

インポートされたスタイルシートで、すべてのテンプレートを誰も使用しない一意の名前のモードにします。たとえばprefix:mymode、プレフィックスを使用して、prefix自分に属する名前空間にバインドします。

インポートされたスタイルシートから処理を呼び出すには、次を使用します

<xsl:apply-templates select="$vNodesToBeProcessed" mode="prefix:mymode"/>
于 2012-07-24T02:45:23.750 に答える