【问题标题】:Find index of xml attributes using mule dataweave使用 mule dataweave 查找 xml 属性的索引
【发布时间】:2016-11-06 05:59:58
【问题描述】:

我有要求作为 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>

ChargeCategory="ShippingCharge" 时索引应该是1,下一次迭代索引应该是2。需要找到ChargeCategory="ShippingCharge" 的索引。

我尝试使用 $$,但它仅支持 xml 节点,不支持属性

代码 - `

%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 {})

            }

            }

            )

            }

` 这里的 SequenceNumber1 应该是 1,2 根据上面提到的 HeaderChargers 条件

示例输入 -

<?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>

【问题讨论】:

  • 你能告诉我们你的代码或你想要的输出吗?
  • 添加代码供参考
  • 你可以添加整个输入 xml 吗?上面的输入只是我猜的一部分
  • 添加样本输入

标签: mule mule-studio mule-component mule-el dataweave


【解决方案1】:

我不确定功能,但我可以想到一个替代方案。而不是循环遍历所有 HeaderCharge 元素,仅循环遍历满足您的条件的元素,然后再次循环遍历不满足的元素。这样,当您执行 $$ 时,您可以获得带有“ShippingCharge”的对象的单独序列号

例如:

     ((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 {})

【讨论】:

  • 感谢您的建议。 h[?($.@ChargeCategory != "ShippingCharge")] 条件验证对我有很大帮助
  • 嗨,乌龟,上述条件是否适用于 xml 节点?我正在尝试在 xml 节点而不是属性上检查相同的内容,但不工作 %input payload application/xml %output application/java --- using (c=payload.catalog.*category-assignment default []) ((c default [] ) filter $.@mode != "delete" map ({ ((c[?($.primary-flag == "true")] default []) map ({ abc:"123" }))}))
  • 示例 xml -mm.com/xml/impex/catalog/2006-10-31" catalog-id="HofCatalog"> true-flag>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 2019-10-17
相关资源
最近更新 更多