私はXSLでPDFを生成するという面白い仕事をしています。私が働いているXML構造は、私はXMLのより有意義な例を与えることをしようとするだろうが、私は存在してもよい法的な境界線に近づいように感じることはありませんXSL for-eachの属性を更新する
<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構造では、すべてのthirdLevel
ノードのPDFにテキストのブロックを出力する必要があります。私がこれまで持っているXSLは基本的に、私は各thirdLevel
ノードのテキストを独自の行に表示させるために、トップ属性に何らかの値を追加する必要が
<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>
のようなものです。私はIDを追加/乗算(1から始まり、各セットごとに1ずつ増加する)とposition()
の組み合わせを試してみましたが、それを正しく得ることはできません。
"CONCAT((193 *の位置())、 'PT')" 動作するはずです、どのように乗算をしていたのですか? – annakata
私が遭遇した問題は、基本的に私が3つの異なるfor-eachレベルに使用できる3つの異なるポジションを持っていることです。また、データがXMLにレイアウトされる方法では、position()を使うだけで、テキストが他のテキストの上に出力されるように見えることがあります。 – bcasp