微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mule-Dataweave 转换问题

如何解决Mule-Dataweave 转换问题

我在为以下有效负载编写数据编织表达式时看到以下错误。如何解决此问题(所有 XML 格式)?

XML 文件

<Interactions
    xmlns="urn:astrazeneca:na:Activity:domain:3"
    xmlns:ns0="urn:astrazeneca:na:Activity:domain:3"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
SchemaVersion="3.1">
    <ns0:Interaction>
        <InteractionDetails CreatedOnDate="2020-01-07T00:40:38"
RecordCompanyCode="AZN"
RestrictionGroup="NONE"
UpdatedOnDate="2020-01-07T00:40:39">
            <StartDate>2020-01-07T00:40:18</StartDate>
            <EndDate>2020-01-07T00:40:18</EndDate>
            <Location xsi:type="LocationAddress">
                <AddressLine LineNo="1">6089 N 1ST ST STE 102</AddressLine>
                <CityName>FRESNO</CityName>
            </Location>
            <RelatedInteraction>
                <RelationshipType>is_a_child_of</RelationshipType>
            </RelatedInteraction>
        </InteractionDetails>
    </ns0:Interaction>
</Interactions>

表达:

%dw 2.0
output application/xml
---
"Interactions" : payload.Interactions mapObject {
  "Interaction" : $ mapObject {
    "InteractionDetails" : $ mapObject {
      "Location" :  $ - "AddressLine"
    }
  }
}

错误

You called the function '-' with these arguments: 
1: String ("2020-01-07T00:40:18")
2: String ("AddressLine")

解决方法

假设您要删除所有出现的给定元素,您可以基于以下 DataWeave 表达式来构建最终解决方案:

%dw 2.0
fun removeElements(element,elements) =
  element mapObject (value,key) -> {
    ((key): 
        if (value is Object) 
            removeElements(
                if (elements is Array) value -- elements //if elements is an array
                else value -- (elements splitBy ','),elements) //if elements is a string with comma separated elements
        else value)
  }
output application/xml
---
// All three options will be accepted by the removeElements function
removeElements(payload,"AddressLine")
//removeElements(payload,["AddressLine","CityName"])
//removeElements(payload,"AddressLine,CityName")

以下输入:

<Interactions
    xmlns="urn:astrazeneca:na:Activity:domain:3"
    xmlns:ns0="urn:astrazeneca:na:Activity:domain:3"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
SchemaVersion="3.1">
    <ns0:Interaction>
        <InteractionDetails CreatedOnDate="2020-01-07T00:40:38"
RecordCompanyCode="AZN"
RestrictionGroup="NONE"
UpdatedOnDate="2020-01-07T00:40:39">
            <StartDate>2020-01-07T00:40:18</StartDate>
            <EndDate>2020-01-07T00:40:18</EndDate>
            <Location xsi:type="LocationAddress">
                <AddressLine LineNo="1">6089 N 1ST ST STE 102</AddressLine>
                <CityName>FRESNO</CityName>
            </Location>
            <RelatedInteraction>
                <RelationshipType>is_a_child_of</RelationshipType>
            </RelatedInteraction>
        </InteractionDetails>
    </ns0:Interaction>
</Interactions>

将导致以下输出:

<?xml version='1.0' encoding='UTF-8'?>
<Interactions xmlns="urn:astrazeneca:na:Activity:domain:3" SchemaVersion="3.1">
  <ns0:Interaction xmlns:ns0="urn:astrazeneca:na:Activity:domain:3">
    <ns0:InteractionDetails CreatedOnDate="2020-01-07T00:40:38" RecordCompanyCode="AZN" RestrictionGroup="NONE" UpdatedOnDate="2020-01-07T00:40:39">
      <ns0:StartDate>2020-01-07T00:40:18</ns0:StartDate>
      <ns0:EndDate>2020-01-07T00:40:18</ns0:EndDate>
      <ns0:Location xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="LocationAddress">
        <ns0:CityName>FRESNO</ns0:CityName>
      </ns0:Location>
      <ns0:RelatedInteraction>
        <ns0:RelationshipType>is_a_child_of</ns0:RelationshipType>
      </ns0:RelatedInteraction>
    </ns0:InteractionDetails>
  </ns0:Interaction>
</Interactions>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。