我正在使用XSL-FO和FOP .95,每当我在xsl-fo中编写代码时,我必须使用此语句来生成空格:
<fo:block>
<xsl:choose>
<xsl:when test="normalize-space(Seller_Name)!=''">
<xsl:value-of select="normalize-space(Seller_Name)"/>
</xsl:when>
<xsl:otherwise><xsl:text> </xsl:text></xsl:otherwise>
</xsl:choose>
</fo:block>
我不想使用这些选择条件时生成空白空间来保存块崩溃。有什么功能或属性可以在这里使用?我尝试过换行处理和白色空间崩溃,但它没有用。请告知一些事情。
答案 0 :(得分:1)
如果您对上述内容感到满意,为什么不对其进行模板化。这会减少对三行的调用:
<xsl:template name="blockwithblank">
<xsl:param name="field"/>
<fo:block>
<xsl:choose>
<xsl:when test="normalize-space($field)!=''">
<xsl:value-of select="$field"/>
</xsl:when>
<xsl:otherwise><xsl:text> </xsl:text></xsl:otherwise>
</xsl:choose>
</fo:block>
</xsl:template>
以上是整个样式表中的一次,然后每个调用只有三行:
<xsl:call-template name="blockwithblank">
<xsl:with-param name="field" select="Seller_Name"/>
</xsl:call-template>
我不确定你每次通话可以缩短三行以上。
答案 1 :(得分:1)
使用两个模板:一个用于常规案例,另一个用于具有更高优先级的模板,用于空案例:
<xsl:template match="Seller_Name">
<fo:block>
<xsl:value-of select="normalize-space()"/>
</fo:block>
</xsl:template>
<xsl:template match="Seller_Name[normalize-space() = '']" priority="5">
<fo:block> </fo:block>
</xsl:template>
您的XSLT需要在适当的位置使用xsl:apply-templates,但它会使当前模板更短。
如果您使用多个元素执行此操作,则可以匹配每个模板中的多个元素并节省大量重复。