Xslt XPath计数转换行

Xslt XPath计数转换行,xslt,xpath,Xslt,Xpath,我需要将填充记录附加到使用XSLT生成的文件中。需要将文件中的行总数四舍五入到最接近的10,以便在以下情况下: FileHeader SectionHeader Detail Detail Detail SectionFooter FileFooter 总行数为7行,我需要添加3条填充记录,以便: FileHeader SectionHeader Detail Detail Detail SectionFooter FileFooter [Filler Record] [Filler Reco

我需要将填充记录附加到使用XSLT生成的文件中。需要将文件中的行总数四舍五入到最接近的10,以便在以下情况下:

FileHeader
SectionHeader
Detail
Detail
Detail
SectionFooter
FileFooter
总行数为7行,我需要添加3条填充记录,以便:

FileHeader
SectionHeader
Detail
Detail
Detail
SectionFooter
FileFooter
[Filler Record]
[Filler Record]
[Filler Record]

我是否应该在每次写一行时在xslt中增加一个变量,并在最后使用它进行mod math,或者是否有办法让xslt/xpath知道它当前写了多少行,这样,我就可以进行一些更可靠的函数调用,从而获得这个计数?

在XSLT中没有增加变量的方法。XSLT也不能告诉您到目前为止它写了多少行(因为XSLT的设计更倾向于独立于执行的顺序)

相反,你可以

  • 根据输入文档,单独计算样式表应该通过其他模板生成多少条记录(例如计数)。如果输出记录的数量等于输入记录的数量,或者至少可以根据另一个记录轻松预测一个记录,那么这是一种更简单的方法。或者

  • 将初始转换的结果捕获到变量中(使用
    nodeset
    扩展或使用XSLT 2.0),然后对其运行
    count()
    ,以确定其中的记录数。然后执行的xsl:copy以输出捕获的结果,然后执行所需的任何填充


  • XSLT不是一种过程语言,而是一种声明性函数语言;只要你用递增一个变量的方式思考,你就会反对这种语言,而不是使用它。您能否编写一个XPath表达式来匹配所有且仅匹配每个节点将生成一个输出行的节点?然后将一个变量设置为
    count(…)
    (将…替换为该XPath表达式)并执行模块运算。如果你不能,你可能需要把“添加填充记录”任务放到一个单独的步骤中。是的,我的程序性大脑在这个问题上崩溃了。。。谢谢你的解释。。。我现在正在尝试这一点,我没有像以前那样详细地介绍上面的内容。。。相反,我会让你告诉我是否有一个部分需要扩展。因此,对于你的两个观点,正如你所说,#1将是最简单的。谢谢,先生!