Мне было поручено собрать книгу (с использованием XSL FO) из нескольких XML-файлов, сейчас я пытаюсь нумеровать цифры в этой книге (простая нумерация, без перезагрузки в главах или что-то в этом роде), мой наивный подход был сделать это
<xsl:template match="figure">
<fo:block xsl:use-attribute-sets="figure">
.. stuff to deal with images ..
<fo:block xsl:use-attribute-sets="figure-caption">
Figure <xsl:number level="any"/>: <xsl:apply-templates/>
</fo:block>
<fo:block xsl:use-attribute-sets="figure-caption">
</xsl:template>
У меня есть сводный XML-файл, который выбирает файлы для использования с помощью функции document()
следующим образом:
<xsl:template match="include">
<xsl:apply-templates select="document(@src)"/>
</xsl:template>
Теперь моя проблема в том, что number
, кажется, всегда считает только экземпляры в текущем файле, а это не то, что я хочу (в настоящее время в файле есть только одно или два изображения, в результате чего все цифры равны 'Рисунок 1 или рисунок 2).
Я рассмотрел два подхода, оба по сути двухпроходные XSLT. Во-первых, простой подход - создать промежуточный XML-файл, содержащий всю книгу, используя преобразование личности, что я неохотно делаю по другим причинам.
Во-вторых, используя расширение node-set()
, которое я пробовал вот так
<xsl:template match="include">
<xsl:apply-templates select="ext:node-set(document(@src))"/>
</xsl:template>
но это дало тот же результат.
Есть идеи? Возможно что-то, что не является двухпроходным преобразованием? Любая помощь будет принята с благодарностью.