[英]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 "101351803" with name "501 Stonewash Straight Jeans""
ItemID="101351803"
ItemShortDesc=" "501 Stonewash Straight Jeans""
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.