【发布时间】:2014-08-14 09:45:27
【问题描述】:
我正在使用 XSLT2 进行 XSL:FO 转换。我需要正确的页面排序来优化性能。
我的 XML 看起来像这样
<DOCUMENT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<A>
<B>
<C TYPE="1.">
<D TYPE="1 . 1">
<ROW>
<Date>06/JUN/2014</Date>
</ROW>
<ROW>
<Date>07/JUN/2014</Date>
</ROW>
<Total>
<Amount>10.50</Amount>
</Total>
</D >
<D TYPE="1 . 2">
<ROW>
<Date>05/JUN/2014</Date>
</ROW>
<ROW>
<Date>06/JUN/2014</Date>
</ROW>
<Total>
<Amount>20.70</Amount>
</Total>
</D >
</C>
<C TYPE="2">
<D TYPE="2 . 1">
<ROW>
<Date>28/JUN/2014</Date>
</ROW>
<Total>
<Duration_Volume>1</Duration_Volume>
<Amount>1.00</Amount>
</Total>
</D >
<D TYPE="2 . 2">
<ROW>
<Date>11/JUN/2014</Date>
</ROW>
<Total>
<Duration_Volume>1</Duration_Volume>
<Amount>1.00</Amount>
</Total>
</D >
</C>
</TRANSACTION>
</MOBILE>
我的 XSLT 看起来像这样
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" exclude-result-prefixes="#all">
<xsl:output indent="yes"/>
<xsl:template match="DOCUMENT">
<page-sequence>
<xsl:for-each select="/DOCUMENT/A/B/C">
<table>
<xsl:for-each select="@TYPE">
<table_row>
<xsl:value-of select="string(.)"/>
</table_row>
</xsl:for-each>
<xsl:for-each select="D">
<table>
<xsl:for-each select="@TYPE">
<table_row>
<xsl:value-of select="string(.)"/>
</table_row>
</xsl:for-each>
<xsl:for-each select="ROW">
<xsl:for-each select="Date">
<table_row>
<xsl:value-of select="node()"/>
</table_row>
</xsl:for-each>
</xsl:for-each>
</table>
</xsl:for-each>
</table>
</xsl:for-each>
</page-sequence>
</xsl:template>
</xsl:stylesheet>
我需要在每出现 50 次 ROW 后获取页面序列。有没有办法在每 50 行之后强制页面顺序。或者有没有办法对其进行页面排序,以便将页面序列应用于每个页面长度的内容?因为现在整个内容都在一个页面序列中,占用大量内存。
【问题讨论】:
-
your last question和这个有什么区别?为什么不采用相同的方法?顺便说一句,为什么单独的页面序列可以优化性能(或内存使用,或两者)?
-
如果我错了,请纠正我,最后一个方法迭代 ROW,因为我有来自 ROW 上方元素的其他值,它们需要以特定方式重复。 FO 处理器将内容保存在内存中,直到它到达页面序列的末尾,因此通过拆分为许多页面序列,我可以更好地管理内存。
-
@Mathias Muller 我已经解决了。
-
那么您应该删除此问题或自行回答。谢谢!