如何在一个地方设置边框样式并在整个XSL中引用它

时间:2018-01-08 14:26:26

标签: xslt xslt-1.0 xsl-fo

我想有一个var /属性,我设置边框样式并引用它,如果我想将边框从1pt更改为2pt我不需要在不同的位置更改它。

例如我现在这样做;

<fo:table border="1pt solid black"  table-layout="fixed"
  width="100%" display-align="center">
 <fo:table-column column-width="10%" border-right="1pt solid black"/>
 <fo:table-column column-width="10%" border-right="1pt solid black"/>
 <fo:table-column column-width="23%" border-right="1pt solid black"/>
 <fo:table-column column-width="8%" border-right="1pt solid black"/>
 <fo:table-column column-width="11%" border-right="1pt solid black"/>
 <fo:table-column column-width="8%" border-right="1pt solid black"/>
 <fo:table-column column-width="20%" border-right="1pt solid black"/>
 <fo:table-header>...

我更喜欢这样的东西;

<xsl:variable
    name="border"
    select="1pt solid black">
</xsl:variable>

<fo:table border="$border"  table-layout="fixed"
  width="100%" display-align="center">
 <fo:table-column column-width="10%" border-right="$border"/>
 <fo:table-column column-width="10%" border-right="$border"/>
 <fo:table-column column-width="23%" border-right="$border"/>
 <fo:table-column column-width="8%" border-right="$border"/>
 <fo:table-column column-width="11%" border-right="$border"/>
 <fo:table-column column-width="8%" border-right="$border"/>
 <fo:table-column column-width="20%" border-right="$border"/>
 <fo:table-header>...

所以我的问题确实是可能的,如果是这样,那么正确的语法是什么?

任何帮助都会很棒,

提前致谢!

1 个答案:

答案 0 :(得分:1)

像这样定义变量(使用撇号,表示文字字符串,而不是xpath表达式)

<xsl:variable name="border" select="'1pt solid black'" />

然后,使用Attribute Value Templates在属性

中使用它
<fo:table-column column-width="20%" border-right="{$border}"/>

或者,您可以使用Attribute Sets实现此目的。定义像这样的属性集

<xsl:attribute-set name="border">
    <xsl:attribute name="border-right" select="'12pt solid black'" />
</xsl:attribute-set>

然后按如下方式使用

<fo:table-column column-width="20%" xsl:use-attribute-sets="border"/>

使用属性集,您可以在集合中拥有多个属性。