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.