簡體   English   中英

Mule Dataweave將XML元素重復為單獨命名的XML元素

[英]Mule Dataweave Repeating XML Elements to Individually Named XML Elements

輸入XML

<Address>
    <Street>Street Line 1</Street>
    <Street>Street Line 2</Street>
    <Street>Street Line 3</Street>
    <City>City</City>
    <Postcode>0000</Postcode>
</Address>

需要輸出XML

<DeliveryAddress>
    <DA1>Street Line 1</DA1>
    <DA2>Street Line 2</DA2>
    <DA3>Street Line 3</DA3>
    <City>City</City>
    <Postcode>0000</Postcode>
</DeliveryAddress>

如何使用Dataweave將每個街道元素放入出站XML中的特定DA元素?

我嘗試使用*通配符(Address。* Street),但是這會將Street元素作為子元素:

<DeliveryAddress>
    <DA1>
        <Street>Street 1</Street>
        <Street>Street 2</Street>
        <Street>Street 3</Street>
    </DA1>
    <City>City</City>
    <Postcode>0000</Postcode>
</DeliveryAddress>

請幫忙^ _ ^

*通配符用於引用重復的元素,尤其是XML格式的元素。 從這一點開始,我們可以順序解決此問題:

  1. 從這個表達式payload.Address.*Street開始,我們將獲得街道列表。
  2. 但是,如果我們直接在當前DataWeave表達式中使用它,則會發生錯誤。 因此,將表達式包裝在方括號(payload.Address.*Street) ,使其成為對象而不是數組。
  3. 現在,我們只需要將Street標簽重命名為對應的DA(n)即可 因此,我們可以利用map運算符來迭代每條記錄,並使用方括號引號 () or '' or ""將輸出的鍵括起來:

("DA" ++ $$ + 1)"DA$($$ + 1)"均返回相同的結果:DA1,DA2,DA3,...

因此,此字段的完整表達式應為: (payload.Address.*Street map { ("DA" ++ $$ + 1): $ })

根據我剛剛在下面復制的Suthony輸入,您可以找到dwl腳本

%dw 1.0

%輸出應用程序/ XML

郵寄地址:{

(payload.Address.*Street map { 
    ("DA" ++ $$ + 1): $
}),
    city:payload.Address.City,
    PostCode:payload.Address.Postcode

}

干杯!

{
    DeliveryAddress: {
        (payload.Address.*Street map {
            ("DA" ++ $$ +1): $
        }),
        City: payload.Address.City,
        Postcode: payload.Address.Postcode
    }
}
  1. 使用地圖遍歷Street元素
  2. ("DA" ++ $$+1)以打印DA1,DA2等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM