由于更好的Java兼容性,我正在将一些XSLT模板移至freemarker,但是freemarker似乎在处理空白方面存在问题。 XML到处都是空格,就像这样:
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row> <fo:table-cell
> <fo:block >
<fo:inline font-weight="bold"
我尝试添加strip_whitespace=true
指令,但是没有效果。这是默认设置,因此可能已经可以正常使用了。
在XSLT中,XML块之间的所有空白都被折叠了。通过将任何自由文本需求放在<xsl:text> example text including padding </xsl:text>
元素中,可以使此操作变得更加容易。
freemarker似乎无法控制文本节点,因此无法折叠空白。
更新:这是freemarker模板的一部分的示例,它在其中生成fo:table-cell
<#macro tableHeaderM tableHeader>
<#list tableHeader.columns as column><@columnM column=column /></#list>
</#macro>
<#macro columnM column>
<fo:table-column column-width="${column.width}cm" />
</#macro>
<#macro rowM row table>
<fo:table-row><#list row.cells as cell><@cellM cell=cell table=table /></#list></fo:table-row>
</#macro>
<#macro cellM cell table>
<fo:table-cell<@cellFormattingM cell=cell table=table />><@blockObjectsM blockObjects=cell.blockObjects /></fo:table-cell>
</#macro>
<#macro cellFormattingM cell table>
<#if cell.border == true> border="0.1mm solid"</#if>
<#if cell.pad == true> padding="3pt"</#if>
<#if cell.shade == true> background-color="#eeeeee"</#if>
<#if table.collapse == true> margin-top="5px"</#if>
</#macro>
答案 0 :(得分:0)
FreeMarker中的空格剥离和修剪仅用于删除模板本身中存在的空格(即,为源代码格式添加的空格)。您的案例中的空白出现在数据模型中。不幸的是,您需要对DOM进行预处理以消除它们(或插入?trim
等)。 FreeMarker DOM包装器不知道哪个空格是无关紧要的。
更新(因为空格不是来自DOM):
默认情况下,strip_whitespace
(空格剥离)为true
,因此添加它不会删除更多的空格。因此,最好的选择是使用<#t>
(也许还有<#rt>
和<#lt>
)来显式删除更多空白。