剥离空白似乎坏了

时间:2018-08-16 16:39:16

标签: freemarker

由于更好​​的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>

1 个答案:

答案 0 :(得分:0)

FreeMarker中的空格剥离和修剪仅用于删除模板本身中存在的空格(即,为源代码格式添加的空格)。您的案例中的空白出现在数据模型中。不幸的是,您需要对DOM进行预处理以消除它们(或插入?trim等)。 FreeMarker DOM包装器不知道哪个空格是无关紧要的。

更新(因为空格不是来自DOM): 默认情况下,strip_whitespace(空格剥离)为true,因此添加它不会删除更多的空格。因此,最好的选择是使用<#t>(也许还有<#rt><#lt>)来显式删除更多空白。