我们的客户使用XSL FO生成PDF输出。他在表格中的描述存在问题,其中单元格在页面末端被拆分。限制是他使用XSL编辑器而不是直接XSL。此编辑器允许您添加XSL片段,但无法访问XSL的所有级别。
不使用编辑器切换到XSL不是一种选择。
在XSL中,一个简单的解决方案如下:
<fo:table-row>
<xsl:attribute name="keep-together.within-page">always</xsl:attribute>
<fo:table-cell>
</fo:table-cell>
</fo:table-row>
但是无法从编辑器访问表格行标签。我可以在表格单元格上设置它。这可能吗?
类似于:
<fo:table-row>
<fo:table-cell>
<xsl:attribute name="../keep-together.within-page">always</xsl:attribute>
</fo:table-cell>
</fo:table-row>
答案 0 :(得分:0)
我不知道您的编辑器中可能的内容,但以下示例可能有所帮助:
<强> XML 强>
<root>
<row>
<cell>Alpha</cell>
<cell>Bravo</cell>
<cell>Charlie</cell>
</row>
<row>
<cell>Delta</cell>
<cell>Echo</cell>
</row>
</root>
<强> XSLT 强>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="cell[1]">
<xsl:attribute name="add">True</xsl:attribute>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>结果强>
<root>
<row add="True">
<cell>Alpha</cell>
<cell>Bravo</cell>
<cell>Charlie</cell>
</row>
<row add="True">
<cell>Delta</cell>
<cell>Echo</cell>
</row>
</root>
这是有效的,因为当第一个cell
开始处理时,父row
仍然没有孩子 - 所以仍然可以创建一个属性并让它采用&#34;采用&#34} 34;由父row
。
如果删除[1]
谓词,则在处理行中第一个单元格之外的任何单元格时,将会出现"Cannot write an attribute node when no element start tag is open"
行的错误。根据您的处理器,此错误可能是致命的。