xsl:fo Увеличить переменную внутри последовательности страниц?

У меня есть несколько страниц последовательности в моем файле 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 ответа

Решение

Ну, здесь очень ограниченная информация, но я могу догадаться.

Ничто не мешает вам использовать XSL и преобразование идентичности для изменения какого-то промежуточного результата. Таким образом, вы могли бы делать то, что вы делаете. Всякий раз, когда вам нужно вывести этот счетчик, почему бы не записать на выход . Ничего больше, просто пустой тег, который представляет счетчик.

Затем напишите XSL для преобразования идентификаторов, который выводит полученный файл как есть, за исключением совпадения в . Этот шаблон заменит его на:

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

Примечание: вы можете также использовать здесь.

Так что вы бы сделали:

XML + XSL -> XSL FO со счетчиками + счетчики изменения идентификаторов XSL -> XSL FO -> форматировать с помощью вашего форматера

Если вы можете придумать шаблон для всех узлов в источнике, которые должны быть пронумерованы, и последовательность нумерации соответствует порядку узлов в исходном документе, то вы можете использовать <xsl:number match="any" count="..." /> сделать подсчет. См. https://www.w3.org/TR/xslt20/

Если последовательность подсчета не соответствует вашему исходному документу или вы не можете найти шаблон, то вы, вероятно, вернулись к постобработке, как предполагает @kevin-brown.

Другие вопросы по тегам