xslt
同じオブジェクトの完全に重複した情報を含むファイルがたくさんあります。それを別xslt
のものに持ち込んで、既存のものに含める可能性はありますか? これを正しく行う方法は?
2 に答える
<xsl:include>
XSLT コードをモジュール化するのに役立ちますが、それ自体は重複したコードを削除しません。
XSLT の最も基本的な機能の 1 つであるテンプレートは、適切に使用すると、コードの重複を大幅に排除できます。
テンプレートの一致パターンは、テンプレートが適用されるさまざまなタイプのノードに一致します。これにより、同じ一致パターンのさまざまなインスタンスを処理するときに、同じコードが多くの場所で使用される場合の重複がなくなります。テンプレートは を使用して関数/サブルーチンと同様に呼び出すことができますが、 を
<xsl:call-template>
使用して処理する一致するテンプレートを選択する方がはるかに強力で柔軟です<xsl:apply-templates>
。後者は、OOP の基本型から仮想関数を呼び出すことに似ています。実行時にどの派生オブジェクトが存在するか、および対応する仮想関数のおそらく多くの特殊化 (オーバーライド) のどれが実行のために選択されるかを知っています。上記の手法とテンプレートへのパラメーターの受け渡しを組み合わせることで、一部の値/ノードのみが異なる重複コードを排除できます。
テンプレートを使用すると、高次関数 (HOF) をシミュレートし、テンプレート/関数をパラメーターとして別のテンプレート/関数に渡し、テンプレート/関数を適用した結果としてテンプレート関数を返すことができます。機能合成と部分適用により、動的に新しい機能を生み出すことができます。FXSL ライブラリは、XSLT 1.0 と XSLT 2.0 の両方の HOF を実装しています。
今後の XPath 3.0 / XSLT 3.0 HOF は言語の標準機能です。関数はパラメーターとして渡され、他の関数への/の結果として返されます。匿名 (インライン) 関数は、XPath 3.0 式内で動的に作成できます。新しい標準の XPath 3.0 関数
fold-left()
とはfold-right()
、map()
関数型プログラミング言語で通常使用される最も基本的な関数です。それらを使用すると、コードサイズとコードの重複を大幅に削減できます。
http://www.xml.com/pub/a/2000/11/01/xslt/index.htmlまたは
Is there a kind of include once in XSLT?<xsl:include>
を利用する必要があります。