XSL-FO在每个节点后添加新行

时间:2014-07-24 09:52:19

标签: xml xslt pdf xsl-fo

我有一个XML文件,其结构如下:

<parent>
    <node>Text 1</node>
    <node>Text 2</node>
    <node>Text 3</node>
    <node>Text 4</node>
    <node>Text 5</node>
</parent>

我想用XSL-FO处理这个XML以产生PDF输出。我有以下XSL-FO模板:

<fo:block>
    <xsl:for-each select="node[position() &lt; last()]">
        <xsl:value-of select="."/>
        <xsl:if test="position() != last()">
            <xsl:text>&#xA;</xsl:text>
        </xsl:if>
    </xsl:for-each>
</fo:block>

这似乎并不好用。我得到内联输出,而不是它自己的行中的每个节点。我该如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:1)

使用

<fo:block  linefeed-treatment="preserve">

答案 1 :(得分:1)

如果您在节点元素上匹配并为它们创建了一个fo:block,那么您可以更好地控制事物。你所拥有的解决方案是将它们内联,另一个答案可以解决,但对它们的控制较少。

如果你想要一个新行(这意味着你想要一个新的块区域),那么把它们放在它自己的块中。

意思是,你会在你的XSL中做某个地方:

 <xsl:template match="node">
     <fo:block>
         <xsl:apply-templates/>
     </fo:block>
 </xsl:template>

你没有理由使用value-of select =“。”。以上内容将为您做到这一点,如果您扩展为在节点元素中包含某些内容,那么您仍然可以设置。