0

私はApache-FOPプロジェクトを介してXMLドキュメントをPDFドキュメントに変換しています。これまでのところ順調です。ただし、後で設定するのは簡単ではありません。私のコードスニペットは次のようなものです、

<fo:table-cell>
    <fo:block margin-top="5pt" text-align="left"><xsl:value-of select="" /></fo:block>
</fo:table-cell>
<fo:table-cell>
    <fo:block margin-top="5pt" text-align="center"><xsl:value-of select="" /></fo:block>
</fo:table-cell>
<fo:table-cell>
    <fo:block margin-top="5pt" text-align="center"><xsl:value-of select="" /></fo:block>
</fo:table-cell>
<fo:table-cell>
    <fo:block margin-top="5pt" text-align="center"><xsl:value-of select="" /></fo:block>
</fo:table-cell>
<fo:table-cell>
    <fo:block margin-top="5pt" text-align="center"><xsl:value-of select="" /></fo:block>
</fo:table-cell>
<fo:table-cell>
     <fo:block margin-top="5pt" text-align="center"><xsl:value-of select="" /></fo:block>
</fo:table-cell>

上記のコードでわかるように、私はmargin-top="5pt" text-align="center"かなり頻繁に持っています。私はこの値を一度だけ書くことができ、後ですべての人に影響を与える1つの変数を変更できるようにする方法を見つけようとしました。


調査結果:

これまでに見つけたのは、XSLTでパラメーターを使用して、変数を定義できるということです。後で使用できます。パラメータ値は5ptにすることができます。そして、私はそれをこのように使用します。

<xsl:attribute name="margin-top">$var</xsl:attribute>

しかし、これは私のコードを完全に読めなくするので良い解決策ではありません(完全ではありませんが、あなたは私が何を意味するのか知っています)。XSLTにCSSのようなものはありますか?

4

1 に答える 1

4

xsl:attributeを使用するのは、非常に手間のかかる方法です。ここでは、コードをインラインで指定できる「属性値テンプレート」を利用することをお勧めします。

<fo:block margin-top="{$var}" text-align="{$var2}">

中括弧は、値が文字どおりの出力ではなく、評価される式であることを示します。

これから続けて、xsl:attribute-setがここであなたの友達になると思います。これにより、後で任意の要素に適用できる一連の属性を作成できます。まず、次のように属性セットを定義します (注、これはxsl:stylesheet要素の下に配置する必要があります) 。

<xsl:attribute-set name="block">
  <xsl:attribute name="margin-top">5pt</xsl:attribute>
  <xsl:attribute name="text-align">left</xsl:attribute>
</xsl:attribute-set> 

次に、それを使用するには、xsl:use-attribute-sets属性を使用するだけです

<fo:block xsl:use-attribute-sets="block">

これにより、次のように出力されます。

<fo:block margin-top="5pt" text-align="left">

さらに、呼び出しプログラムから値を設定したい場合は、属性セットを「パラメータ化」することもできます。たとえば、次も機能するはずです

<xsl:param name="margin-top" select="'6pt'" />
<xsl:param name="text-align" select="'left'" />

<xsl:attribute-set name="block">
  <xsl:attribute name="margin-top"><xsl:value-of select="$margin-top" /></xsl:attribute>
  <xsl:attribute name="text-align"><xsl:value-of select="$text-align" /></xsl:attribute>
</xsl:attribute-set> 
于 2012-10-11T15:35:51.597 に答える