我想知道是否有任何方法可以在 XSL 转换中创建全局计数器..
情况是,目前我正在使用嵌套循环对订单和项目进行分组和循环。 这是一个示例输入:
<shipment>
<shipmentid>1111222</shipmentid>
<context>TEST</context>
<delivery>
<deliveryItem>
<deliveryNumber>123</deliveryNumber>
<deliveryDate>...</deliveryDate>
<arrivalDate>...</arrivalDate>
<customerOrderNumber>X999</customerOrderNumber>
<customerItemCode>MC423</customerItemCode>
</deliveryItem>
<deliveryItem>
<deliveryNumber>123</deliveryNumber>
<deliveryDate>...</deliveryDate>
<arrivalDate>...</arrivalDate>
<customerOrderNumber>X877</customerOrderNumber>
<customerItemCode>AY642</customerItemCode>
</deliveryItem>
<deliveryItem>
<deliveryNumber>123</deliveryNumber>
<deliveryDate>...</deliveryDate>
<arrivalDate>...</arrivalDate>
<customerOrderNumber>X315</customerOrderNumber>
<customerItemCode>XY223</customerItemCode>
</deliveryItem>
<deliveryItem>
<deliveryNumber>123</deliveryNumber>
<deliveryDate>...</deliveryDate>
<arrivalDate>...</arrivalDate>
<customerOrderNumber>X315</customerOrderNumber>
<customerItemCode>MM647</customerItemCode>
</deliveryItem>
</delivery>
</shipment>
预期的输出应该看起来像这样(不考虑任何细节):
<Order>
<ControlHeader>HL</ControlHeader>
<HL01>1</HL01>
</Order>
<Item>
<ItemHierarchicalLevel>
<ControlHeader>HL</ControlHeader>
<HL01>2</HL01>
</ItemHierarchicalLevel>
</Item>
<Item>
<ItemHierarchicalLevel>
<ControlHeader>HL</ControlHeader>
<HL01>3</HL01>
</ItemHierarchicalLevel>
</Item>
<Item>
<ItemHierarchicalLevel>
<ControlHeader>HL</ControlHeader>
<HL01>4</HL01>
</ItemHierarchicalLevel>
</Item>
<Order>
<ControlHeader>HL</ControlHeader>
<HL01>5</HL01>
</Order>
<Item>
<ItemHierarchicalLevel>
<ControlHeader>HL</ControlHeader>
<HL01>6</HL01>
</ItemHierarchicalLevel>
</Item>
目前这是我正在使用的嵌套 for-each 的结构,用于对订单和输出行详细信息进行分组:
<xsl:for-each-group select="/shipment/delivery/deliveryItem" group-by="customerOrderNumber">
<tns:Order>
<tns:ControlHeader>HL</tns:ControlHeader>
<tns:HL01>
</tns:HL01>
</tns:Order>
<xsl:for-each select="current-group()">
<tns:Item>
<tns:ItemHierarchicalLevel>
<tns:ControlHeader>HL</tns:ControlHeader>
<tns:HL01>
</tns:HL01>
</tns:ItemHierarchicalLevel>
</tns:Item>
</xsl:for-each>
</xsl:for-each-group>
有没有什么方法可以创建一个可以在 HL01 字段中使用的数字序列,这对于订单和项目循环都是相同的,并且每次迭代都会继续递增而不会重置? 无法使用position()函数,因为它在每个循环中都是不同的值。
我想知道是否有任何方法可以在 XSL 转换中创建全局计数器
从稍微不同的层面回答这个问题:请记住,XSLT 是一种没有全局可变变量的函数式语言,因此“全局计数器”的概念对该语言来说是完全陌生的。因此,编号机制依赖于功能机制:
xsl:number
检查输入树中给定节点的位置,position()
返回您正在处理的项目序列中项目的位置。所以你的问题的简单答案是“不”;您必须找到满足您要求的不同解决方案。