在 Mulesoft 中将一种 XML 格式转换为另一种 XML 格式

Transform one XML format to other XML format in Mulesoft

我想借助 Dataweave 将一种 XML 格式转换为另一种 XML 格式,要转换的有效 Dataweave 2.0 表达式是什么

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <notifications xmlns="http://soap.sforce.com/2005/09/outbound">
      <OrganizationId>00D1x0000008cRREAY</OrganizationId>
      <ActionId>04k1x000000CbbhAAC</ActionId>
      <SessionId/>
      <EnterpriseUrl>https://hastens--ecom.my.salesforce.com/services/Soap/c/48.0/00D1x0000008cRR</EnterpriseUrl>
      <PartnerUrl>https://hastens--ecom.my.salesforce.com/services/Soap/u/48.0/00D1x0000008cRR</PartnerUrl>
      <Notification>
        <Id>04l1x000002dPXfAAM</Id>
        <sObject xmlns:sf="urn:sobject.enterprise.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="sf:PBSI__PBSI_Sales_Order__c">
        <sf:order-status>CANCELLED</sf:order-status>
        <sf:order-no>00000905</sf:order-no>
        <sf:zenkraftOrderShippingStatus>shipped</sf:zenkraftOrderShippingStatus>
        <sf:zenkraftOrderCarrier>UPS</sf:zenkraftOrderCarrier>
        <sf:zenkraftOrderTrackingNumber>37999</sf:zenkraftOrderTrackingNumber>
        </sObject>
      </Notification>
    </notifications>
  </soapenv:Body>
</soapenv:Envelope>

<?xml version="1.0" encoding="UTF-8"?>
<orders xmlns="http://www.demandware.com/xml/impex/order/2006-10-31">
    <order order-no="00000905">
        <status>
            <order-status>CANCELLED</order-status> -> don't insert it in case it is not cancelled
        </status>
        <custom-attributes>
            <custom-attribute attribute-id="zenkraftOrderShippingStatus">SHIPPED</custom-attribute> 
            <custom-attribute attribute-id="zenkraftOrderTrackingNumber">37999</custom-attribute> 
            <custom-attribute attribute-id="zenkraftOrderCarrier">UPS</custom-attribute> 
        </custom-attributes>
    </order>
</orders>

你可以用类似的东西来做到这一点:

%dw 2.0
output application/xml
ns ns0 http://www.demandware.com/xml/impex/order/2006-10-31
var obj = payload.Envelope.Body.notifications.Notification.sObject
var customAttrs = obj -- ["order-status", "order-no"]
---
{
    orders @(xmlns: ns0): {
        order @("order-no": obj."order-no"): {
            (status: obj."order-status") if obj."order-status" == "CANCELLED"
        },
        "custom-attributes": customAttrs mapObject ((value, key) -> {
            "custom-attribute" @(id: "$key"): value
        })
    }
}