Как выполнить преобразование XML в Mule Data weave 2.0

#xml #dataweave #mulesoft #mule4

#xml #dataweave #mulesoft #mule4

Вопрос:

У меня есть два набора результатов из базы данных, один из которых находится в полезной нагрузке, а другой — в другой переменной. Я пытаюсь выполнить итерацию по нескольким результирующим наборам, чтобы сформировать xml. Во время второй итерации мне нужно получить несколько тегов объектов из второго набора результатов.

Полезная нагрузка:

 [
    {
        "Version": "1.0",
        "ID": "VKP",
        "Password": "VKP",
        "Username": "VKP",
        "id": "123456789",
        "Amount": "1000",
        "StreetAddress": "Oaks Ave"
    }
]
 

vars.borrowerResult :

 [
    {
        "firstname": "Vinoy",
        "lastname" :"VKP"
    },
    {
        "firstname": "Kevin",
        "lastname" :"Peter"
    }
]
 

Текущий код:

 %dw 2.0
output application/xml
fun StreetAddressSizeCheck(data) = if(data != null and sizeOf(data) > 30) data[0 to 29] else data
---
DRIVERequest @(version : "1.00") : {
    Authentication @(ID : "*****", Password : "******", Username : "******") : null,
    BatchRequest : payload map {
        Mortgage @(id : $.id, Amount : $.Amount) : {
            Property @(StreetAddress : StreetAddressSizeCheck($.StreetAddress)) : null,
            //Below is the place i am trying to add the code to iterate over variabe.
            // If there are multiple objects i need to get as much entries are there in Array.
            vars.borrowerResult map{
                Borrower @(firstname :$.firstname ,lastname : $.lastname) : null, 
            }
    }
}
 

Ожидаемый вывод XML

 <?xml version='1.0' encoding='UTF-8'?>
<DRIVERequest version="1.00">
  <Authentication ID="*****" Password="******" Username="******"/>
  <BatchRequest>
    <Mortgage id="123456789" Amount="1000">
      <Property StreetAddress="Oaks Ave"/>
      <Borrower firstname="Vinoy" lastname="VKP"/>
      <Borrower firstname="Kevin" lastname="Peter"/>
    </Mortgage>
  </BatchRequest>
</DRIVERequest>
 

Ответ №1:

Редактировать: Ах .. Салим опубликовал тот же ответ. Следовало обновить страницу 🙂 Я был занят очисткой форматирования, хех.

 output application/xml
fun StreetAddressSizeCheck(data) = if(data != null and sizeOf(data) > 30) data[0 to 29] else data
---
DRIVERequest @(version : "1.00") : {
    Authentication @(ID : "*****", Password : "******", Username : "******") : null,
    BatchRequest : payload map {
        Mortgage @(id : $.id, Amount : $.Amount) : {
            Property @(StreetAddress : StreetAddressSizeCheck($.StreetAddress)) : null,
            (vars.borrowerResult map {
                Borrower @(firstname :$.firstname ,lastname : $.lastname) : null, 
            })
        }
    }
}
 

Круглые скобки вокруг карты необходимы, потому что они в основном означают «развернуть это в родительский объект». Без них вам нужно было бы установить ключ для массива, которому он будет назначен.

Комментарии:

1. Спасибо. Фактически тот же ответ 🙂

Ответ №2:

Попробуйте с этим:

 %dw 2.0
output application/xml
//2nd Result set in Variable 
var borrowerResult= [
{
    "firstname": "Vinoy",
    "lastname" :"VKP"
},
{
    "firstname": "Kevin",
    "lastname" :"Peter"
}
]

fun StreetAddressSizeCheck(data) = if(data != null and sizeOf(data) > 30) data[0 to 29] else data
---
DRIVERequest @(version : "1.00") : {
Authentication @(ID : "*****", Password : "******", Username : "******") : null,
BatchRequest : payload map {
Mortgage @(id : $.id, Amount : $.Amount) : {
  Property @(StreetAddress : StreetAddressSizeCheck($.StreetAddress)) : null,
   (borrowerResult map{
             Borrower @(firstname :$.firstname ,lastname : $.lastname) : null, 
 })

 }
 }
}
 

введите описание изображения здесь