2016-12-05 7 views
0

次の問題があります。私はXSL-Tを使ってXMLファイルを変換しようとしています。XSL - コールテンプレートと他のタグの一致出力

<!-- here are some imports--> 
<xsl:import href="..."/> 

<!-- here is template--> 
<xsl:template match="..."> 
    <!-- here are some new tags to be added to the document --> 
</xsl:template> 

<!-- here is second template--> 
<xsl:template match="..."> 
    <!-- here are some new tags and template-calls from imported xsl documents, such as: --> 
    <xsl:call-template name="..."/> 
</xsl:template> 

<!-- here is the place, where I want to create a match for output from all previous lines... --> 
<!-- ... --> 

ので、与えられたスニペットは、このXSLファイルで何が起こるかを示すためにコメントしている:私はこのようなXSLファイルを持っています。私は複数のインポートと多くのテンプレートコールを持っています。残念ながら、すべての行の出力にいくつかのタグを追加する必要があり、このファイル内でこれを行う必要があります。別のテンプレートと一致属性を使用することをお勧めしますが、どのようにすればいいですか?

インポートしたすべてのドキュメントを編集することはできません。また、私は一時的なヘルパーファイルを作成したくありません。 XSLバージョンは1.0です。

は事前にありがとうございます:)あなたは、他の変換の出力への変換を適用すると

+1

正確な一致パターンとテンプレートの内容とサンプル入力を必要な結果とともに表示してください。 –

+1

あなたの質問は完全には明確ではありません。一般的に、XSLTスタイルシートは、独自の出力ではなく、XML入力で動作します。テンプレートを適用した結果を処理する場合は、変数に適用してから変数を処理します。または、最初のスタイルシートで作成されたドキュメントを2番目のスタイルシートで処理します。 –

答えて

1

、それは一般的にパイプラインと呼ばれています。 XSLTにパイプラインを実装する主な2つのテクニックがあります:1つは、変換ごとに別々のスタイルシートを用意し、Ant、XProc、シェルスクリプト、Javaアプリケーション、または何らかのフレームワークなどの外部テクノロジを使用してそれらを連鎖させることですコククーンなど。 (A)コードは、よりモジュラー、したがって、より再利用可能であり、及び(b):他のアプローチは、典型的な符号化パターンが

<xsl:template match="/"> 
    <xsl:variable name="temp1"> 
    <xsl:apply-templates select="." mode="phase-1"/> 
    </xsl:variable> 
    <xsl:variable name="temp2"> 
    <xsl:apply-templates select="$temp1" mode="phase-2"/> 
    </xsl:variable> 
    <xsl:apply-templates select="$temp2" mode="phase-3"/> 
</xsl:template> 

ある複数のスタイルシートのアプローチは2つの利点を有する、単一のスタイルシート内のパイプラインであります上記のコードは、 "結果ツリーの断片"に一般的な処理を適用することができないため、実際にはXSLT 1.0では機能しません。EXSLT node-set()拡張関数を使用して、ほとんどのXSLT 1.0プロセッサでこの問題を回避できます。

<xsl:apply-templates select="exslt:node-set($temp1)" mode="phase-2"/> 

しかし、パイプライン処理を見ていると正しい方向にあります。複雑な変換をシーケンシングに分割する簡単なステップのeは間違いなく正しい方法です。

+0

ありがとうございます。あなたの答えはちょうど素晴らしいです。 もう1つのスタイルシートを使用して、次の変換ステップをAntビルドツールに追加することに決めました。このアプローチは、再利用可能であり、論理を理解し理解するのがより容易です。 – KP13

関連する問題