0

私は 2 つの xsl (たとえば A と B) ファイルを開発しています。A.xslはB.xslに依存しています。B.xslファイルでは、いくつかの要素をハードコーディングしていましたが、その後はA.xslに依存する必要があります。これらの 2 つの xsl ファイルを再帰的にチェックする方法はありますか。

とにかくこれを行うことはありますか。またはない場合は?該当しない場合は、いいえと答えてください。

ここで、ほとんどの xml 要素が共通である xml ファイルの変換に興味を持ったので、1 つのテンプレートに共通する要素を持つ xsl ファイルを作成し、include を使用して他の xsl ファイルから呼び出すことを考えました。ただし、要素に必要なハードコーディングがあり、汎用の xsl を再度使用する必要がある時点で行き詰まりました。以下に例を示します。この例は一般的なものです。開発する他の多くの xsl に使用するたびに、一般的な xsl ファイルをハードコーディングしたくありません。

入力xmlのサンプルです。

<element>
   <subelement></subelement>
</element>

これは、出力 xml のサンプルです。

<element>
   <element2></element2>
   <subelement></subelement2>
</element>

これはA.xslです

<xsl:inculde href="B.xsl">
<xsl:call-template name="ele"/>

これは B.xsl です

<xsl:template name="ele">
<xsl:copy-of select="element"/>
</xsl:template>
4

1 に答える 1

1

A.xsl と B.xsl が互いに依存しているという意味が完全には明確ではありませんが、多くの動作を行う 2 つの変換タスクに対して 2 つ以上のスタイルシートを維持する方法をおそらく探しているように思えます。共通ですが、いくつかの点で異なります。

具体的に言うと、2 つの変換を念頭に置いていると仮定します。これらを赤と緑と呼びます (A と B と混同しないようにするため、まったく同じものである場合とそうでない場合があります)。次のプロパティ:

  • 多くの要素 (要素 C1、C2、... Cn など) は、2 つの変換でまったく同じ方法で処理されます。
  • 一部の要素 (D1、D2、... Dn) は異なる方法で処理されます。
  • さらに、Red 変換への入力でのみ見られる要素 R1、R2、... Rn と、Green 変換への入力でのみ見られる G1、G2、... Gn が存在する場合があります。

XSLT で Red および Green 変換を構造化するには、いくつかの方法があります。簡単に説明できるのは、これらの 2 つです。

(1) C.xsl(共通要素用)、R.xsl(R要素とD要素のRed変換用)、G.xsl(G要素とD要素のGreen変換用)の3つのスタイルシートを作成します。 . R.xsl と G.xsl はそれぞれ C.xsl をインクルードまたはインポートするため、単一の処理方法を持つ共通要素のコードは 1 か所で記述および保守されます。

(2) 2 つのスタイルシートを作成します。Red.xsl は完全な Red 変換を定義します。共通要素 C1、C2 など、処理が異なる要素 (D1、D2 など)、Red 変換に固有の要素 (R1、R2 など) をカバーします。何もインポートしません。

Green.xsl は Red.xsl をインポートし、D 要素と G 要素のテンプレートを含めます。C 要素のテンプレートがないため、C 要素は緑の変換でも赤の変換と同じ方法で処理されます。Green.xsl は Green 変換のメイン スタイルシートであるため、D 要素の Green.xsl テンプレートは、同じ要素の Red.xsl テンプレートよりも優先度が高くなります。R 要素のテンプレートもインポートされますが、入力に R 要素がないため、何も一致せず、害はありません。

優れた参考書 (または完全に読みやすい技術的な散文である XSLT 仕様) で読む必要があるのは、xsl:importandxsl:include要素、priority属性 on xsl:template、およびimport precedenceの概念です。

于 2012-09-13T18:55:40.187 に答える