XSLT FOP生成PDF时表格筛选行自动连续编号问题求解
问题原因
position()函数返回的是节点在xsl:for-each遍历的原始节点集中的位置,你当前的代码遍历所有DataRow节点,仅在输出时用xsl:if过滤空值,被过滤的节点依然会被计入position()的计数,所以会出现跳号问题。
解决方案
将筛选逻辑移动到xsl:for-each的select属性中,直接仅遍历符合条件的DataRow节点,此时position()返回的就是筛选后节点的连续顺序编号。
调整后完整代码片段
<fo:table width="100%"> <fo:table-column column-width="8mm"/> <fo:table-column column-width="172mm"/> <fo:table-body> <xsl:for-each select="/Data/DataRow[string-length(Text) > 0]"> <fo:table-row> <fo:table-cell> <fo:block text-align="left"> <xsl:value-of select="position()" /><xsl:text>.</xsl:text> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="left"> <xsl:value-of select="Text" /> </fo:block> </fo:table-cell> </fo:table-row> </xsl:for-each> </fo:table-body> </fo:table>
该方案兼容XSLT 1.0及以上所有版本,无需额外扩展支持。
内容的提问来源于stack exchange,提问作者kalpha
相关产品推荐
相关产品推荐

