【发布时间】:2017-01-10 14:34:49
【问题描述】:
我不确定如何使用一些计数逻辑从 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:RETAILSEQUENCENUMBER 中找到另一个 ZD01,则使下一个 DISCOUNTTYPECODE = ZD12 然后 ZD13 等。仅在 ZD01 记录上。
一旦 XML 落入下一个 RETAILSEQUENCENUMBER,逻辑就需要重新开始,以便 ZD01 变为 ZD11。
【问题讨论】:
-
这是 XSLT 1.0 中的一个棘手问题。 (没有任何类型的循环可以增加变量。)您可以阅读dpawson.co.uk/xsl/sect2/N4486.html#d5509e427,看看这是否有助于您思考。