【发布时间】:2021-06-28 16:29:20
【问题描述】:
在下面的 XML 中,我需要在第一次迭代中将 OrderShipmentItemss LineItemNbr 值(例如:000010)与所有 OrderItems/ScheduleLineItems 的 LineItemNbr(000010、000020、000030、000040)进行比较。
对所有 OrderShipmentItem LineItemNbr (000010,000020) 重复此比较。根据给定的 xml 应该是 2 次。
如果它们相等,则将 DelivereQty 值映射到 order 元素的 Quantity 属性,将 customerNbr 映射到 order 元素的 customercontact 属性。
<Orders>
<OrderEvent>
<SAPOrderLineNbrs>
<LineItemNbr>000010</LineItemNbr>
<LineItemNbr>000020</LineItemNbr>
</SAPOrderLineNbrs>
</OrderEvent>
<OrderHeader>
<OrderItems>
<LineItemNbr>000010</LineItemNbr>
<ScheduleLineItems>
<LineItemNbr>000010</LineItemNbr>
<CustomerNbr>22222222</CustomerNbr>
</ScheduleLineItems>
</OrderItems>
<OrderItems>
<LineItemNbr>000020</LineItemNbr>
<ScheduleLineItems>
<LineItemNbr>000020</LineItemNbr>
<CustomerNbr>11111111</CustomerNbr>
</ScheduleLineItems>
</OrderItems>
<OrderItems>
<LineItemNbr>000030</LineItemNbr>
<ScheduleLineItems>
<LineItemNbr>000030</LineItemNbr>
<CustomerNbr>33333333</CustomerNbr>
</ScheduleLineItems>
</OrderItems>
<OrderItems>
<LineItemNbr>000040</LineItemNbr>
<ScheduleLineItems>
<LineItemNbr>000040</LineItemNbr>
<CustomerNbr />
</ScheduleLineItems>
</OrderItems>
<OrderShipment>
<OrderShipmentItems>
<LineItemNbr>000010</LineItemNbr>
<OrderShipmentScheduleItems>
<DeliveredQty>1.000</DeliveredQty>
</OrderShipmentScheduleItems>
</OrderShipmentItems>
<OrderShipmentItems>
<DeliveredQty>2.000</DeliveredQty>
<LineItemNbr>000020</LineItemNbr>
<OrderShipmentScheduleItems>
<DeliveredQty>2.000</DeliveredQty>
</OrderShipmentScheduleItems>
</OrderShipmentItems>
</OrderShipment>
</OrderHeader>
</Orders>
我的输出应该包含与 LineItemNbr 相同数量的订单(在上面是 2),我们需要检查 OrderShipmentItems 的 LineItemNbr 值(示例:000010)和所有 OrderItems/ScheduleLineItems 的 LineItemNbr(000010、000020、000030、000040)对于每个 lineItemNbr。
如果它们相等,那么我们需要将 DeliveredQty 值映射为 Quantity,将 CustomerNbr 映射为 CustomerContact。
输出应该是:
<Orders>
<Order Quantity="1.000" CustomerContact="222222222"/>
<Order Quantity="2.000" CustomerContact="111111111"/>
<Orders>
请帮帮我
我尝试的是下面的 xslt,但它只比较第一个列表元素值。
<xsl:for-each select="/*/OrderHeader/OrderShipment/OrderShipmentItems">
<order>
<xsl:for-each select="/*/OrderHeader/OrderItems/ScheduleLineItems">
<xsl:if test="/*/OrderHeader/OrderShipment/OrderShipmentItems/LineItemNbr = /*/OrderHeader/OrderItems/ScheduleLineItems/LineItemNbr">
<xsl:attribute name="Quantity">
<xsl:value-of select="/*/OrderHeader/OrderShipment/OrderShipmentItems/OrderShipmentScheduleItems/DeliveredQty" />
</xsl:attribute>
<xsl:attribute name="CustomerContact">
<xsl:value-of select="/*/OrderHeader/OrderItems/ScheduleLineItems/CustomerNbr" />
</xsl:attribute>
</xsl:if>
</xsl:for-each>
</order>
</xsl:for-each>
【问题讨论】:
-
您的描述不清楚。通常,您会使用key tp 解析交叉引用。
-
您不需要在问题标题中重复 XSLT - 这就是标签的用途。
标签: xslt xslt-2.0 string-comparison