Dataweave JSON в формат XML-Mule-4

Я новичок в использовании преобразования dataweave, я пытаюсь написать выражение dataweave Mule 4 для преобразования входного JSON в выходной XML-формат, у меня есть полезная нагрузка в формате JSON, и я хочу преобразовать его в определенный формат XML, ниже фактический JSON вместе с выходным XML

Тег product-id (XML) будет происходить из атрибута = name тега PBSI__Item__r тега JSON, а значение распределения в XML - из атрибута name тега PBSI__Inventory__r

JSON:

[
  {
    "PBSI__Item__r": {
      "Id": null,
      "type": "PBSI__PBSI_Item__c",
      "Name": "116065"
    },
    "PBSI__Inventory__r": [
      {
        "Id": null,
        "type": "PBSI__PBSI_Inventory__c",
        "PBSI__Real_Quantity__c": "13.0"
      }
    ],
    "PBSI__Location__r": {
      "Id": null,
      "type": "PBSI__PBSI_Location__c",
      "Name": "OB043"
    },
    "Id": null,
    "type": "PBSI__Lot__c"
  },
  {
    "PBSI__Item__r": {
      "Id": null,
      "type": "PBSI__PBSI_Item__c",
      "Name": "116066"
    },
    "PBSI__Inventory__r": [
      {
        "Id": null,
        "type": "PBSI__PBSI_Inventory__c",
        "PBSI__Real_Quantity__c": "1.0"
      }
    ],
    "PBSI__Location__r": {
      "Id": null,
      "type": "PBSI__PBSI_Location__c",
      "Name": "OA011"
    },
    "Id": null,
    "type": "PBSI__Lot__c"
  }
]

выходной XML:

<?xml version='1.0' encoding='UTF-8'?>
<inventory xmlns="http://www.demandware.com/xml/impex/inventory/2007-05-31">
  <inventory-list>
    <header list-id="Hastens_Inventory">
      <default-instock>false</default-instock>
      <use-bundle-inventory-only>false</use-bundle-inventory-only>
    </header>
    <records>
      <record product-id="116065">
        <allocation>13</allocation>
        <allocation-timestamp>2019-04-24T07:09:51.954Z</allocation-timestamp>
      </record>
      <record product-id="116066">
        <allocation>1</allocation>
        <allocation-timestamp>2019-04-24T07:09:51.965Z</allocation-timestamp>
      </record>
    </records>
  </inventory-list>
</inventory>

person Pankaj Mishra    schedule 10.11.2020    source источник
comment
Вы должны предоставить правила для преобразования JSON в XML, прежде чем пытаться написать сценарий DataWeave. Откуда должен взяться каждый элемент и атрибут?   -  person aled    schedule 10.11.2020
comment
Спасибо aled, я добавил это сейчас   -  person Pankaj Mishra    schedule 10.11.2020


Ответы (1)


Это должно помочь вам найти решение, а также узнать, как это сделать, я не дал полного решения, чтобы вы могли использовать его в качестве отправной точки (почти 80% выполнено).

Чтобы включить пространство имен, перейдите по ссылке https://docs.mulesoft.com/mule-runtime/4.3/dataweave-cookbook-include-xml-namespaces

{
    inventory:{
    inventorylist: {
        header @("list-id":"Hastens_Inventory"):
         { 
             "default-instock":false,
             "use-bundle-inventory-only":false
         },
         records: {(payload map
         {
             record @("product-id": $.PBSI__Item__r.Name): {
                 allocation: $.PBSI__Inventory__r[0].PBSI__Real_Quantity__c,
                 "allocation-timestamp": now()
             }
         })}

    }
}
}
person Salim Khan    schedule 10.11.2020
comment
Салим, ты забыл {(...)} вокруг payload map .... Это создает несколько records элементов - person Jorge Garcia; 10.11.2020
comment
Привет, Хорхе, ты прав, мог бы мне помочь, я пробовал разными способами, но получаю синтаксическую ошибку - person Pankaj Mishra; 10.11.2020
comment
Я оставил это, чтобы Панкадж мог немного поработать над сценарием. Решение не было полноценным, так что наряду с решением нужно было также учиться / работать. - person Salim Khan; 10.11.2020
comment
Обновлен скрипт для объединения записей в один экземпляр. - person Salim Khan; 10.11.2020