简体   繁体   English

使用Mule DataWeave查找xml属性的索引

[英]Find index of xml attributes using mule dataweave

I have requirement as print index of xml attribute 我有要求作为xml属性的打印索引

<Item>
    <HeaderCharges>
      <HeaderCharge ChargeCategory="ShippingCharge" ChargeName="ShippingCharge1" ChargeAmount="10.0" Reference="Free delivery">
        <Extn BaseChargeAmount="10.0" DeliveryCode="" DeliverySequenceNo="1" ConsignmentNo="0000164182"  ItemID="1452778282"/>
    </HeaderCharge>   
    <HeaderCharge ChargeCategory="ShippingDiscount" ChargeName="ShippingDiscount1" ChargeAmount="6.0" Reference="Discount">
        <Extn BaseChargeAmount="6.0" DeliveryCode="" DeliverySequenceNo="1" ConsignmentNo="0000164182"  ItemID="1452778282"
        POSDepartmentID="1097" PromotionID="100819" Description="" ReasonClass="PROMOVCH" ReasonCode="1230" ReasonDescription="50%off" />
    </HeaderCharge>
    <HeaderCharge ChargeCategory="ShippingDiscount" ChargeName="ShippingDiscount2" ChargeAmount="4.0" Reference="Discount 2">
        <Extn BaseChargeAmount="4.0" DeliveryCode="" DeliverySequenceNo="1" ConsignmentNo="0000164182"  ItemID="1452778282"
        POSDepartmentID="1097" PromotionID="100819" ReasonClass="PROMOVCH" ReasonCode="1230" ReasonDescription="50%off" />
    </HeaderCharge>
    <HeaderCharge ChargeCategory="ShippingCharge" ChargeName="ShippingCharge1" ChargeAmount="10.0" Reference="Free delivery">
        <Extn BaseChargeAmount="10.0" DeliveryCode="" DeliverySequenceNo="2" ConsignmentNo="0000164182"  ItemID="1452778282"/>
    </HeaderCharge> 
        </HeaderCharges>
</Item>

when ChargeCategory="ShippingCharge" then index should be 1, for the next iteration index should be 2. Need to find index for ChargeCategory="ShippingCharge" . ChargeCategory="ShippingCharge"索引应为1,下一次迭代索引应为2。需要为ChargeCategory="ShippingCharge"查找索引。

I tried with $$ but its supporting only for xml nodes, not for attributes 我尝试使用$$,但它仅支持xml节点,不支持属性

Code - ` 代码-`

%dw 1.0
 %input payload application/xml
 %output application/xml

 %var counter=sizeOf payload.Order.OrderLines.*OrderLine
 %var counter1=sizeOf payload.Order.HeaderCharges.*HeaderCharge

 %var head=sizeOf payload.Order.HeaderCharges.*HeaderCharge.@ChargeCategory == "ShippingCharge" distinctBy $.@ChargeCategory
 ---
using (w=payload.Order.OrderLines.*OrderLine default [], a=payload.Order.PaymentMethods.*PaymentMethod default [],h=payload.Order.HeaderCharges.*HeaderCharge default [], z=payload.Order.HeaderCharges.*HeaderCharge filter $.ChargeCategory == "ShippingCharge" default [])



Transaction @(CancelFlag:"false"):{((payload.*Order default []) map {

        RetailTransaction: {

((h default []) map ({ // HeaderCharge Level
   LineItem @(EntryMethod:"Keyed"):{

            SequenceNumber:counter + $$ + 1,     
            BeginDateTime:payload.Order.@OrderDate[0..18],
            EndDateTime:payload.Order.PosLogDataList.PosLogData.@EndDateTime[0..18],

            CustomerOrderForDelivery @(OrderStatus:"Sale"):{
                 Quantity:"1",
                 Associate:{
                        AssociateID:payload.Order.PosLogDataList.PosLogData.@AssociateID
                    },


                (($ default []) groupBy $.@DeliverySequenceNo map ({
                RetailPriceModifier @(MethodCode:"AutomaticPromotion",VoidFlag:"false"):{
                    SequenceNumber1: $$,
                    Amount @(Action:"Subtract"):$.Extn.@BaseChargePerUnit,
                    PreviousPrice:$.Extn.@BaseUnitPrice when $$ == 0 otherwise $.Extn.@BaseUnitPrice - [$$ - 1 ].Extn.@BaseChargePerUnit,
                    NewPrice:""

                }
                }) when $.@ChargeCategory == "ShippingCharge" otherwise {}) 
                }

            }

            }

            ) when $.HeaderCharges != '' otherwise {})

            }

            }

            )

            }

` Here SequenceNumber1 should come as 1,2 as per above mentioned HeaderChargers condition `根据上述HeaderChargers条件,此处SequenceNumber1应该为1,2

Sample input - 样本输入-

<?xml version="1.0" encoding="UTF-8"?>
<Order AuthorizationExpirationDate="2016-06-22T14:43:05+00:00"
    BillToID="8801533001732" CarrierAccountNo=" " CarrierServiceCode=" "
    ChargeActualFreightFlag="N" Createts="2016-06-22T14:43:05+00:00"
      TermsCode=" " TotalAdjustmentAmount="0.00" evaluate="yes" isHistory="N">
       <Extn BaseOrderTotal="385.00" BaseOriginalOrderTotal="385.00"
        CustomerID="63873" InstoreID="147258" IsFraudCancelled="N"
        IsMarketingPref="N" OrderTotal="385.00"
        OriginalTotalAmount="385.00" TerminalID="704292"/>
    <OrderLines>
        <OrderLine AllocationDate="2016-06-24T00:00:00+00:00"
            CarrierAccountNo=" " CarrierServiceCode="NDD_COU"
            CustomerLinePONo=" " CustomerPONo=" " DeliveryCode=" "
            DepartmentCode=" " FreightTerms=" " HoldFlag="N"
            HoldReasonCode=" " ImportLicenseNo=" " InvoicedQty="0.00"
            ScacAndServiceKey="" ShipNode="1097" ShipTogetherNo=" "
            SplitQty="0.00" Status="Created" StatusQuantity="30.00"
            SubLineNo="1" isHistory="N">
            <OrderStatuses>
                <OrderStatus OrderHeaderKey="2016062214430220261511"
                    OrderLineKey="2016062214430420261512"
                    OrderLineScheduleKey="201606221437430520261529"
                    OrderReleaseStatusKey="201606221477430520261530"
                    PipelineKey="20160222070748372596" Status="1100"
                    StatusDate="2016-06-22T14:43:04+00:00"
                    StatusDescription="Created" StatusQty="30.00" TotalQuantity="30.00"/>
            </OrderStatuses>
            <OrderDates>
                <OrderDate ActualDate="2016-06-24T00:00:00+00:00"
                    CommittedDate="2016-06-24T00:00:00+00:00"
                    DateTypeId="YCD_FIRST_PROMISED_DATE"
                    OrderHeaderKey="2016062214430220261511"
                    OrderLineKey="2016062214430420261512" OrderReleaseKey=" "/>
            </OrderDates>
            <Instructions NumberOfInstructions="0"/>
            <Item AliasName="" AliasValue="" CostCurrency=" "
                CountryOfOrigin=" " CustomerItem=" "
                CustomerItemDesc=" " ECCNNo=" "
                HarmonizedCode="6203423100" ISBN=" "
                ItemDesc="product &quot;101351803&quot; with name &quot;501 Stonewash Straight Jeans&quot;"
                ItemID="101351803"
                ItemShortDesc=" &quot;501 Stonewash Straight Jeans&quot;"
                ItemWeight="0.70" ItemWeightUOM="KG"
                ManufacturerItem=" " ManufacturerItemDesc=" "
                ManufacturerName="Levi's" NMFCClass=" " NMFCCode=" "
                NMFCDescription=" " ProductClass="Good" ProductLine=" "
                ScheduleBCode=" " SupplierItem=" " SupplierItemDesc=" "
                TaxProductCode="default" UPCCode=" " UnitCost="0.00" UnitOfMeasure="EACH"/>
            <ItemDetails CanUseAsServiceTool="N" GlobalItemID=""
                IsItemSuperseded="N" ItemGroupCode="PROD"
                ItemID="101351803" ItemKey="20160406111557582111"
                OrganizationCode="HOF" UnitOfMeasure="EACH">
                <ItemAliasList>
                    <ItemAlias AliasName="EAN" AliasValue="5412456008434"/>
                </ItemAliasList>
            </ItemDetails>
            <Extn AgeRestricted="N" BaseLineTotal="600.00"
                BaseListPrice="12.00" BaseUnitPrice="20.00"
                ConsignmentNo="0000217069-1" DeliverySequenceNo="1"
                HybrisLineNo="1" LineTotal="600.00" POSDepartmentID="0049"/>
            <LinePriceInfo DiscountPercentage="0.00" IsPriceLocked="N"
                LineTotal="360.00" ListPrice="12.00" RetailPrice="0.00"
                TaxableFlag="N" UnitPrice="20.00"/>
            <PersonInfoShipTo AddressID="8802157101079"
                AddressLine1="HighSroad1" AddressLine2="Nattf"
                AddressLine3="" AddressLine4="" AddressLine5=""
                AddressLine6="" AlternateEmailID="" Beeper=""
                City="Trava1234" Company="" Country="UK" DayFaxNo=""
                DayPhone="" Department="" EMailID="" EveningFaxNo=""
                EveningPhone="" FirstName="Ferand" JobTitle=""
                LastName="abcd" MiddleName="" MobilePhone="9876551111"
                OtherPhone="" PersonID=""
                PersonInfoKey="2016062214430520261527" State=""
                Suffix="" Title="Mr" ZipCode="2000"/>
            <LineCharges>
                <LineCharge ChargeAmount="240.00"
                    ChargeCategory="SystemPromotion"
                    ChargeName="12% on purchase over paypal"
                    ChargeNameKey="" ChargePerLine="0.00"
                    ChargePerUnit="8.00" InvoicedChargeAmount="0.00"
                    InvoicedChargePerLine="0.00"
                    InvoicedChargePerUnit="0.00" IsBillable="Y"
                    IsDiscount="Y"
                    Reference="percentage off on purchase over paypal"
                    RemainingChargeAmount="240.00"
                    RemainingChargePerLine="0.00" RemainingChargePerUnit="8.00">
                    <Extn BaseChargeAmount="240.00"
                        BaseChargePerLine="0.00"
                        BaseChargePerUnit="8.00"
                        PromotionID="0000100253"
                        ReasonClass="12%  on purchase over debit card"
                        ReasonCode="12% on purchase over debit card" ReasonDescription="percentage off on purchase over paypal"/>
                </LineCharge>
            </LineCharges>
        </OrderLine>
    </OrderLines>
   <HeaderCharges>
  <HeaderCharge ChargeCategory="ShippingCharge" ChargeName="ShippingCharge1" ChargeAmount="10.0" Reference="Free delivery">
    <Extn BaseChargeAmount="10.0" DeliveryCode="" DeliverySequenceNo="1" ConsignmentNo="0000164182"  ItemID="1452778282"/>
</HeaderCharge>   
<HeaderCharge ChargeCategory="ShippingDiscount" ChargeName="ShippingDiscount1" ChargeAmount="6.0" Reference="Discount">
    <Extn BaseChargeAmount="6.0" DeliveryCode="" DeliverySequenceNo="1" ConsignmentNo="0000164182"  ItemID="1452778282"
    POSDepartmentID="1097" PromotionID="100819" Description="" ReasonClass="PROMOVCH" ReasonCode="1230" ReasonDescription="50%off" />
</HeaderCharge>
<HeaderCharge ChargeCategory="ShippingDiscount" ChargeName="ShippingDiscount2" ChargeAmount="4.0" Reference="Discount 2">
    <Extn BaseChargeAmount="4.0" DeliveryCode="" DeliverySequenceNo="1" ConsignmentNo="0000164182"  ItemID="1452778282"
    POSDepartmentID="1097" PromotionID="100819" ReasonClass="PROMOVCH" ReasonCode="1230" ReasonDescription="50%off" />
</HeaderCharge>
<HeaderCharge ChargeCategory="ShippingCharge" ChargeName="ShippingCharge1" ChargeAmount="10.0" Reference="Free delivery">
    <Extn BaseChargeAmount="10.0" DeliveryCode="" DeliverySequenceNo="2" ConsignmentNo="0000164182"  ItemID="1452778282"/>
</HeaderCharge> 
    </HeaderCharges>
</Order>

I am not sure of the functionality, but I could think of an alternative.instead of looping through all HeaderCharge elements loop only through them which satisfies your condition and again loop through them which doesnt satisfy. 我不确定功能,但我可以想到一种替代方案。与其循环遍历所有HeaderCharge元素,不如仅循环遍历满足您条件的元素,然后再次遍历不满足要求的元素。 This way when you do a $$ you can get a separate sequence number for the objects with'ShippingCharge' 这样,当您执行$$时,可以使用“ ShippingCharge”获取对象的单独序列号

eg: 例如:

     ((h[?($.@ChargeCategory != "ShippingCharge")] default []) map ({
            //ur code here when not equals to shipping charges
        }

        ) when $.HeaderCharges != '' otherwise {}),
    ((h[?($.@ChargeCategory == "ShippingCharge")] default []) map ({
            //ur code here when equals to shipping charges
        }

        ) when $.HeaderCharges != '' otherwise {})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM