【问题标题】:Dataweave JSON to XML format-Mule-4Dataweave JSON 转 XML 格式-Mule-4
【发布时间】:2021-02-22 18:11:19
【问题描述】:

我是使用 dataweave 转换的初学者,我正在尝试编写 Mule 4 dataweave 表达式来将输入 JSON 转换为输出 XML 格式,我有一个 JSON 格式的有效负载,我想将其转换为特定的 XML 格式,下面是实际的 JSON 以及输出 XML

product-id(XML) 标签将来自 = name 属性的 PCSI__Item__r 标签的 JSON XML中的分配值来自PBSI__Inventory__r标签的name属性

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>

【问题讨论】:

  • 在尝试编写 DataWeave 脚本之前,您必须提供将 JSON 转换为 XML 的规则。每个元素和属性应该来自哪里?
  • 谢谢aled,我已经添加了

标签: dataweave mule4


【解决方案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()
             }
         })}

    }
}
}

【讨论】:

  • 萨利姆,你忘了payload map ... 周围的{(...)}。这会生成多个 records 元素
  • 嗨,豪尔赫,你是对的,可以帮我做到这一点,我尝试了很多方法,但出现语法错误
  • 我把它留了下来,以便 Pankaj 可以在脚本上工作一点。该解决方案尚未完善,因此除了解决方案之外,还涉及一些学习/工作。
  • 更新了脚本以将记录折叠到一个实例中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多