2017-08-16 23 views
0

xmlからPDFを作成するのにxslスタイルシートを使用します。さまざまなセクションを表示するために使用される多数のテンプレートがあります。テンプレート内のxslグローバル変数へのアクセス

は、多くのテンプレートの中では、私は色はいくつかの条件を条件になりたい、今すぐ背景色

<fo:block ... background-color="#2D338E" ...>..</fo:block> 

で様々なヘッダを表示します。 だから、今の色のための2つの値がされている - 私が午前#の2D338Eと#の2D458E(単なる例) 私は変数

<xsl:variable name="color"><!-- I define conditions here --> 
</xsl:variable> 

を作成する問題がすべてでそれを使用するために、ということですテンプレートを作成するには、それらのすべてでカラーパラメータを定義してから、作成した変数をそのパラメータの値として渡す必要があります。私は引数でパイプしないと、変数 "color"をテンプレート定義の中から "見る"ことができません。 これを修正できますか?その変数を一度、どこかに定義してアクセスすることはできますか?パラメータを追加する各テンプレートを調べるには時間がかかりすぎます。また、いくつかのテンプレートを複数回呼び出すことができるので、それを渡す時間はさらに長くなります。

+0

テンプレートの外で、スタイルシートの最上位に変数を定義します。その後、どのテンプレートでも有効範囲内になります。 –

答えて

1

変換のすべてのインスタンスで同じ色になるかどうかは、私の説明からわかりません。そうであれば、それをグローバル変数として定義することができます。ただし、一部のセクションの色が他のセクションの色と異なる場合、これは機能しません。

XSLT 2.0には、解決策、つまりトンネルパラメータがあります。 xsl:with-param[@tunnel='yes']を使用してパラメータを設定すると、間接的に呼び出されるテンプレートと直接呼び出されるテンプレートからアクセスできるようになり、各テンプレートでパラメータを宣言する際の問題を回避できます。 XSLT 2.0を使用しているのか、XSLT 2.0に移行するのがオプションなのか、あなたの投稿には言及していません。

関連する問題