На работе мне дали задание создавать PDF-файлы с помощью XSL. Структура XML, с которой я работаю, похожа на
<records>
<topLevel>
<topLevelID></topLevelID>
<secondLevel>
<secondLevelID></secondLevelID>
<thirdLevel>
</thirdLevel>
<thirdLevel>
</thirdLevel>
</secondLevel>
</topLevel>
<topLevel>
<topLevelID></topLevelID>
<secondLevel>
<secondLevelID></secondLevelID>
<thirdLevel>
</thirdLevel>
<thirdLevel>
</thirdLevel>
</secondLevel>
</topLevel>
</records>
Я бы попытался привести более содержательный пример XML, но мне не хочется приближаться к каким-либо юридическим границам, которые могут существовать. С этой структурой XML я должен вывести блок текста в PDF для каждого узла thirdLevel
. XSL, который у меня пока есть, похож на
<xsl:for-each select ="topLevel">
<xsl:variable name="topID" select="topLevelID"/>
<xsl:for-each select ="secondLevel">
<xsl:variable name="secondID" select="secondLevelID"/>
<xsl:for-each select="thirdLevel">
<fo:block-container position="absolute" height="12.8pt" width="220.8pt" left="160pt" display-align="auto">
<xsl:attribute name="top">
<xsl:value-of select="concat(193 + [whatshouldgohere]), 'pt')"/>
</xsl:attribute>
<fo:block font-size="7pt">
<xsl:call-template name="insertThirdLevel"/>
</fo:block>
</fo:block-container>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
По сути, мне нужно добавить некоторое значение в атрибут top, чтобы текст для каждого узла thirdLevel
отображался в отдельной строке. Я пытался использовать комбинации добавления / умножения на ID (начинается с 1 и увеличивается на 1 для каждого набора) и position()
, но я не могу понять, как это правильно.