模板中的xsl全局变量访问

时间:2017-08-16 22:46:52

标签: templates variables xslt

我使用xsl样式表从xml创建PDF。有大量模板用于显示各个部分。

在许多模板中,我会显示各种带有背景颜色的标题

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

现在,我希望颜色取决于某些条件。 所以,现在有2个颜色值 - #2D338E和#2D458E(仅举例) 我创建了一个变量

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

我遇到的问题是,为了在所有模板中使用它,我必须在所有模板中定义颜色参数,然后将该创建的变量作为该参数的值传递。如果我不通过参数传递它,我无法从模板定义中“看到”变量“color”。 这可以修复吗?我可以在某个地方定义该变量,然后再访问它吗?通过每个模板添加参数太长了。通过它甚至更长时间,因为一些模板可以被多次调用。

1 个答案:

答案 0 :(得分:1)

根据您的描述,我不清楚转换中的所有实例的颜色是否相同。如果是,则可以将其定义为全局变量。但是,如果某些部分的颜色与其他部分的颜色不同,则无法使用。

XSLT 2.0有解决方案,即隧道参数。如果使用xsl:with-param[@tunnel='yes']设置参数,则可以访问间接调用的模板以及直接调用的模板,这可以避免您在每个模板中声明参数时所描述的问题。您没有在帖子中说明您是使用XSLT 2.0,还是选择迁移到XSLT 2.0。