0

我的 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>
4

2 回答 2

1

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

如果计数序列与您的源文档不匹配,或者您找不到模式,那么您可能会回到后处理,正如@kevin-brown 建议的那样。

于 2018-08-24T15:40:33.173 回答
0

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

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

然后编写一个身份转换 XSL,它按原样输出结果文件,除了 <counter> 上的匹配项。此模板将替换为:

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

注意:您也可以在此处使用 <xsl:number>。

所以你会这样做:

XML+XSL -> XSL FO with counters + XSL identity change counters -> XSL FO -> format with your formatter

于 2018-08-23T21:39:19.823 回答