我有一个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() < last()]">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</fo:block>
这似乎并不好用。我得到内联输出,而不是它自己的行中的每个节点。我该如何解决这个问题?
谢谢!
答案 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 =“。”。以上内容将为您做到这一点,如果您扩展为在节点元素中包含某些内容,那么您仍然可以设置。