源XML: 在xslt中使用的for-each中重复相同的节点。我需要循环遍历所有订单项。如果我有3个订单项,则使用相同的第一个订单项重复3次。
<?xml version="1.0" encoding="UTF-8"?>
<orders xmlns="http://www.oracle.com">
<product-lineitems>
<product-lineitem>
<net-price>100.00</net-price>
<tax>6.35</tax>
<gross-price>106.35</gross-price>
<base-price>100</base-price>
<lineitem-text>Originals Modern</lineitem-text>
<tax-basis>100.00</tax-basis>
<product-id>TW2P84400ZA</product-id>
<product-name>The Waterbury</product-name>
<quantity unit="">1.0</quantity>
<tax-rate>0.0635</tax-rate>
<shipment-id>1234</shipment-id>
</product-lineitem>
<product-lineitem>
<net-price>130.00</net-price>
<tax>8.26</tax>
<gross-price>138.26</gross-price>
<base-price>65.00</base-price>
<lineitem-text>Weekender Slip-thru</lineitem-text>
<tax-basis>130.00</tax-basis>
<product-id>TW2P919009J</product-id>
<product-name>Weekender Fairfield65</product-name>
<quantity unit="">2.0</quantity>
<tax-rate>0.0635</tax-rate>
<shipment-id>1234</shipment-id>
<price-adjustments>
<price-adjustment>
<net-price>-26.00</net-price>
<tax>-1.65</tax>
<gross-price>-27.65</gross-price>
<base-price>-26.00</base-price>
<tax-basis>-26.00</tax-basis>
<promotion-id>fathers_day_20</promotion-id>
<campaign-id>FATHER'S DAY 20% OFF - 04/01/14 9:22:15 am</campaign-id>
<coupon-id>FATHER20</coupon-id>
</price-adjustment>
</price-adjustments>
</product-lineitem>
<product-lineitem>
<net-price>60.00</net-price>
<tax>3.81</tax>
<gross-price>63.81</gross-price>
<base-price>20.00</base-price>
<lineitem-text>Straps - Weekender</lineitem-text>
<tax-basis>60.00</tax-basis>
<product-id>TW7C06900GZ</product-id>
<product-name>Weekender™ Fairfield Red/White/Blue Strap, 20mm</product-name>
<quantity unit="">3.0</quantity>
<tax-rate>0.0635</tax-rate>
<shipment-id>1234</shipment-id>
<price-adjustments>
<price-adjustment>
<net-price>-12.00</net-price>
<tax>-0.76</tax>
<gross-price>-12.76</gross-price>
<base-price>-12.00</base-price>
<tax-basis>-12.00</tax-basis>
<promotion-id>fathers_day_20</promotion-id>
<campaign-id>FATHER'S DAY 20% OFF - 04/01/14 9:22:15 am</campaign-id>
<coupon-id>FATHER20</coupon-id>
</price-adjustment>
</price-adjustments>
</product-lineitem>
</product-lineitems>
<shipping-lineitems>
<shipping-lineitem>
<net-price>12.95</net-price>
<tax>0.82</tax>
<gross-price>13.77</gross-price>
<base-price>12.95</base-price>
<lineitem-text>Shipping</lineitem-text>
<tax-basis>12.95</tax-basis>
<price-adjustment>
<net-price>-7.95</net-price>
<tax>-0.50</tax>
<gross-price>-8.45</gross-price>
<base-price>-7.95</base-price>
<tax-basis>-7.95</tax-basis>
<lineitem-text>$5 Expedited Shipping</lineitem-text>
<promotion-id>fathers_day_shipping</promotion-id>
<campaign-id>FATHER'S DAY $5 Shipping - 04/01/14 9:22:15 am</campaign-id>
<coupon-id>FATHER20</coupon-id>
</price-adjustment>
<item-id>EXPEDITED_SHIPPING</item-id>
<shipment-id>1234</shipment-id>
<tax-rate>.0635</tax-rate>
</shipping-lineitem>
</shipping-lineitems>
<shipments>
<shipment>
<shipping-method>EXPEDITED-SHIPPING</shipping-method>
<shipping-address>
<first-name>Satish</first-name>
<last-name>Kumar</last-name>
<address1>555 Christian Rd</address1>
<address2>Middlebury</address2>
<city>CT</city>
<postal-code>06762</postal-code>
<state-code>CT</state-code>
<country-code>US</country-code>
<phone>2033461234</phone>
</shipping-address>
<shipment-id></shipment-id>
</shipment>
</shipments>
<totals>
<merchandize-total>
<net-price>290.00</net-price>
<tax>18.42</tax>
<gross-price>308.42</gross-price>
</merchandize-total>
<adjusted-merchandize-total>
<net-price>252.00</net-price>
<tax>16.00</tax>
<gross-price>268.83</gross-price>
</adjusted-merchandize-total>
<shipping-total>
<net-price>12.95</net-price>
<tax>0.82</tax>
<gross-price>13.77</gross-price>
</shipping-total>
<adjusted-shipping-total>
<net-price>5.00</net-price>
<tax>0.32</tax>
<gross-price>5.32</gross-price>
</adjusted-shipping-total>
<order-total>
<net-price>257.00</net-price>
<tax>16.32</tax>
<gross-price>273.32</gross-price>
</order-total>
</totals>
<payments>
<payment>
<credit-card>
<card-type>VISA</card-type>
<card-token>AH92FU288BS</card-token>
<card-holder>Jon Paul</card-holder>
<expiration-month>1</expiration-month>
<expiration-year>2017</expiration-year>
</credit-card>
<amount>185.05</amount>
<transaction-id>XYZ123</transaction-id>
<processor-id>MYINFO</processor-id>
<transaction-type>AUTH</transaction-type>
<orderBusinessType>B2C</orderBusinessType>
</payment>
</payments>
</order>
</orders>
XSLT USED:
<template match="/">
<!--HEADERS LEVEL MAPPING FOR THE ORDER IS WORKING FINE. I AM HAVING A PROBLEM WITH THE LINES MAPPING.-->
</XxtgEcomOmsHeadersAll>
<xxtgEcomOmsLinesAllCollection>
<for-each select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem">
<XxtgEcomOmsLinesAll>
<tmxFwp>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:product-id"/>
</tmxFwp>
<qtyOrdered>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:quantity"/>
</qtyOrdered>
<lineDescription>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:product-name"/>
</lineDescription>
<lineStatusCode>
<value-of select="/imp1:orders/imp1:order/imp1:status/imp1:order-status"/>
</lineStatusCode>
<omsLinePrice>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:net-price"/>
</omsLinePrice>
<omsLineTax>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:tax"/>
</omsLineTax>
<omsLineGrossPrice>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:gross-price"/>
</omsLineGrossPrice>
<omsLineBasePrice>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:base-price"/>
</omsLineBasePrice>
<omsLineItemText>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:lineitem-text"/>
</omsLineItemText>
<omsLineTaxBasis>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:tax-basis"/>
</omsLineTaxBasis>
<omsLineTaxRate>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:tax-rate"/>
</omsLineTaxRate>
<omsLineNetPriceAdj>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:price-adjustments/imp1:price-adjustment/imp1:net-price"/>
</omsLineNetPriceAdj>
<omsLineTaxAdj>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:price-adjustments/imp1:price-adjustment/imp1:tax"/>
</omsLineTaxAdj>
<omsLineGrossPriceAdj>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:price-adjustments/imp1:price-adjustment/imp1:gross-price"/>
</omsLineGrossPriceAdj>
<omsLineBasePriceAdj>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:price-adjustments/imp1:price-adjustment/imp1:base-price"/>
</omsLineBasePriceAdj>
<omsLineTaxBasisAdj>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:price-adjustments/imp1:price-adjustment/imp1:tax-basis"/>
</omsLineTaxBasisAdj>
<omsLinePromotionId>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:price-adjustments/imp1:price-adjustment/imp1:promotion-id"/>
</omsLinePromotionId>
<omsLineCompaignId>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:price-adjustments/imp1:price-adjustment/imp1:campaign-id"/>
</omsLineCompaignId>
<omsLineCouponId>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:price-adjustments/imp1:price-adjustment/imp1:coupon-id"/>
</omsLineCouponId>
<lineUnitPrice>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:base-price"/>
</lineUnitPrice>
<lineUnitCost>
<value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:base-price"/>
</lineUnitCost>
</XxtgEcomOmsLinesAll>
</for-each>
</template>
Unable to do the for-each for all the nodes. That is the issue.
In out put i see first line item TW2P84400ZA repeated 3 times.
**>TW2P84400ZA<
>TW2P84400ZA<
>TW2P84400ZA<**
Instead i need to see all the line items in the output
**>TW2P84400ZA<
>TW2P919009J<
>TW7C06900GZ<**
由于
答案 0 :(得分:0)
简而言之,问题是:
当你这样做时:
<xsl:for-each select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem">
你被置于product-lineitem
的背景中。在此上下文中,您只需指定产品ID的相对路径:
<xsl:value-of select="imp1:product-id"/>
以选择当前的订单项“product-id
。
相反,你这样做:
<xsl:value-of select="/imp1:orders/imp1:order/imp1:product-lineitems/imp1:product-lineitem/imp1:product-id"/>
从根目录开始选择整个文档中的所有product-id
个节点,并在 - XSLT 1.0中 - 返回第一个节点的值。