我的xsl文件中有多个块,我希望将其格式化为一行,但是如果空间不足,则块将移至下一行。 目前,我有以下xsl块:
<fo:static-content flow-name="header-continued">
<fo:block-container>
<fo:block>
<xsl:for-each select="/myroot/category">
<fo:inline>
<xsl:value-of select="name"/>
</fo:inline>
</xsl:for-each>
</fo:block>
</fo:static-content>
</fo:block-container>
当前,如果宽度不足-内容只会在左右两侧被剪切。 当多个DIV且它们具有display:inline-block样式时,我想要的行为类似于HTML标记。
答案 0 :(得分:2)
将fo:inline
更改为包含包含名称的fo:inline-container
的{{1}}。
fo:block
将采用所需的宽度(除非您指定宽度),并且其中的文本不会超过一行(除非它宽于可用宽度)。参见https://www.w3.org/TR/xsl11/#fo_inline-container。
或者,将fo:inline-container
更改为<fo:inline>
。那应该与FOP 1.1兼容。
答案 1 :(得分:2)
某些格式化程序在给出此提示时:
<fo:inline>foo</fo:inline><fo:inline>foo</fo:inline><fo:inline>foo</fo:inline><fo:inline>foo</fo:inline><fo:inline>foo</fo:inline>
在每个元素之间不会中断。因此,更改模板以在每个<fo:inline>
之间输出一个空格。
请参见https://en.wikipedia.org/wiki/Zero-width_space
该实体为​
赞:
<xsl:for-each select="/myroot/category">
<fo:inline>
<xsl:value-of select="name"/>
</fo:inline>
<xsl:text>​</xsl:text>
</xsl:for-each>
这应该在每个<fo:inline>
之间创建一个零宽度的分隔空间,以使其可以折断多行。
这当然假设您在它们之间不希望有空格。
现在,就是说,在上面的模板中,我会注意到<fo:inline>
元素绝对没有任何作用(除非可能引起您的问题),因为它们没有单独的样式或其他内容。
我认为您会满意:
<xsl:for-each select="/myroot/category">
<xsl:value-of select="name"/>
</xsl:for-each>
实际上这是完全一样的。如果您的数据如下所示:
<name>foo</name>
<name>bar</name>
<name>foo</name>
<name>bar</name>
<name>foo</name>
<name>bar</name>
那么您的输出将是:
foobarfoobarfoobar
然后您可以了解为什么没有休息时间。