xsl:fo在页面序列中增加一个变量?

时间:2018-08-23 15:29:36

标签: pdf xsl-fo apache-xml-graphics

我的xsl文件中有几个页面序列。每个页面序列内都会调用一个xsl模板。在每个模板中,我有一个包含一个变量的块,如果执行该块,则需要将其递增....我尝试使用全局变量,但在这里的许多帖子中我们发现我们无法在xsl-fo中递增全局变量...有人可以指导我该怎么做吗?

我的xsl文件是这样的:

   <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0"
        xmlns:pdf="http://xmlgraphics.apache.org/fop/extensions/pdf">

        <xsl:output encoding="UTF-8" indent="yes" method="xml"
            standalone="no" omit-xml-declaration="no" />


        <xsl:template match="analyseData">

        <fo:page-sequence master-reference="simpleA6">
                        <fo:flow flow-name="xsl-region-body" border-collapse="collapse">
                            <xsl:call-template name="template1" />
                        </fo:flow>
        </fo:page-sequence>

        <fo:page-sequence master-reference="simpleA6">
                        <fo:flow flow-name="xsl-region-body" border-collapse="collapse">
                            <xsl:call-template name="template2" />
                        </fo:flow>
        </fo:page-sequence>
        <fo:page-sequence master-reference="simpleA6">
                        <fo:flow flow-name="xsl-region-body" border-collapse="collapse">
                            <xsl:call-template name="template3" />
                        </fo:flow>
        </fo:page-sequence>

        </xsl:template>

2 个答案:

答案 0 :(得分:1)

如果您可以为源中需要编号的所有节点提出一个模式,并且编号顺序按照源文档中节点的文档顺序,则可以使用<xsl:number match="any" count="..." />进行计数。参见https://www.w3.org/TR/xslt20/#numbering-based-on-position

如果计数顺序与您的原始文档不匹配或找不到模式,那么您可能会返回到后处理,如@ kevin-brown所说。

答案 1 :(得分:0)

嗯,这里的信息非常有限,但我可以猜到。

没有什么可以阻止您使用XSL和身份转换来修改某些临时结果。 这样您就可以做您正在做的事情。每当需要输出此计数器时,为何不写入输出。仅此而已,只是一个代表计数器的空标签。

然后编写一个身份转换XSL,按原样输出结果文件,但上的匹配项除外。该模板将其替换为:

 <fo:inline><xsl:value-of select="count(preceding::counter) + 1"/></fo:inline>

注意:您也可以在此处使用

所以您会这样做:

XML + XSL->带有计数器的XSL FO + XSL身份更改计数器-> XSL FO->使用格式化程序格式化