我不确定如何使用一些计数逻辑从 for-each 切换到循环逻辑
这是 xml 的小示例。序列号和折扣号的范围可能很大。我之前已经排序过,所以 xml 的顺序是正确的。
<ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
<ns2:RETAILSEQUENCENUMBER>1</ns2:RETAILSEQUENCENUMBER>
<ns2:DISCOUNTSEQUENCENUMBER>1</ns2:DISCOUNTSEQUENCENUMBER>
<ns2:DISCOUNTTYPECODE>ZD01</ns2:DISCOUNTTYPECODE>
</ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
<ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
<ns2:DATAHEADERCOLUMN_SEGNAM>/POSDW/E1BPLINEITEMDISCOUNT002</ns2:DATAHEADERCOLUMN_SEGNAM>
<ns2:RETAILSEQUENCENUMBER>1</ns2:RETAILSEQUENCENUMBER>
<ns2:DISCOUNTSEQUENCENUMBER>2</ns2:DISCOUNTSEQUENCENUMBER>
<ns2:DISCOUNTTYPECODE>Z407</ns2:DISCOUNTTYPECODE>
</ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
<ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
<ns2:DATAHEADERCOLUMN_SEGNAM>/POSDW/E1BPLINEITEMDISCOUNT002</ns2:DATAHEADERCOLUMN_SEGNAM>
<ns2:RETAILSEQUENCENUMBER>1</ns2:RETAILSEQUENCENUMBER>
<ns2:DISCOUNTSEQUENCENUMBER>3</ns2:DISCOUNTSEQUENCENUMBER>
<ns2:DISCOUNTTYPECODE>Z407</ns2:DISCOUNTTYPECODE>
</ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
<ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
<ns2:RETAILSEQUENCENUMBER>2</ns2:RETAILSEQUENCENUMBER>
<ns2:DISCOUNTSEQUENCENUMBER>1</ns2:DISCOUNTSEQUENCENUMBER>
<ns2:DISCOUNTTYPECODE>ZD01</ns2:DISCOUNTTYPECODE>
</ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
<ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
<ns2:DATAHEADERCOLUMN_SEGNAM>/POSDW/E1BPLINEITEMDISCOUNT002</ns2:DATAHEADERCOLUMN_SEGNAM>
<ns2:RETAILSEQUENCENUMBER>2</ns2:RETAILSEQUENCENUMBER>
<ns2:DISCOUNTSEQUENCENUMBER>2</ns2:DISCOUNTSEQUENCENUMBER>
<ns2:DISCOUNTTYPECODE>Z407</ns2:DISCOUNTTYPECODE>
</ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
这是我的 XSLT
<xsl:for-each select="ns0:idocData/ns2:_x002F_POSDW_x002F_E1POSTR_CREATEMULTIP001GRP">
<xsl:for-each select="ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002">
<ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
<ns2:DATAHEADERCOLUMN_SEGNAM><xsl:value-of select="ns2:DATAHEADERCOLUMN_SEGNAM"/></ns2:DATAHEADERCOLUMN_SEGNAM>
<ns2:RETAILSEQUENCENUMBER><xsl:value-of select="ns2:RETAILSEQUENCENUMBER"/></ns2:RETAILSEQUENCENUMBER>
<ns2:DISCOUNTSEQUENCENUMBER><xsl:value-of select="ns2:DISCOUNTSEQUENCENUMBER"/></ns2:DISCOUNTSEQUENCENUMBER>
<ns2:DISCOUNTTYPECODE><xsl:value-of select="ns2:DISCOUNTTYPECODE"/></ns2:DISCOUNTTYPECODE>
</ns2:_x002F_POSDW_x002F_E1BPLINEITEMDISCOUNT002>
</xsl:for-each>
</xsl:for-each>
我的要求是遍历 xml,如果发现 ns2:DISCOUNTTYPECODE 是 ZD01,则使 ZD11。如果在同一个 ns2:RETAIL 序列号中找到另一个 ZD01,则制作下一个 DISCOUNTTYPECODE = ZD12,然后是 ZD13 等。仅在 ZD01 记录上。
一旦 XML 落到下一个 RETAIL 序列号上,逻辑就需要再次启动,以便 ZD01 变为 ZD11。
我建议编写另一个转换,它将预处理数据以使用上面提到的 dpawson 站点中的一种技术对其进行排序和分组,这将使确定折扣类型变得更加容易。
对数据进行分组和排序后,此转换将仅关注对折扣类型等的任何更改。然后,您可以查看以前的ZD01兄弟姐妹的数量,并根据以前的兄弟姐妹的数量推断新的折扣类型
- 0 个先前的 ZD01 元素 = ZD11
- 1 个前一个 ZD01 元件 = ZD12
- 等。
- 等。
前面的同级也可用于确定是否需要根据不同的零售编号值重新开始重新编号。