问题描述
我在为以下有效负载编写数据编织表达式时看到以下错误。如何解决此问题(所有 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>