如何解决如何合并两个 XML 变量
分散-聚集的输出是具有相同格式 XML 文件的两个变量。我现在需要将这两个文件合二为一。实验和搜索没有发现任何合并两个 XML 文件的示例代码。
输入 1 来自一个报告流程,输入 2 来自另一份报告。除了“TYPE”参数外,格式将始终相同。我想删除“日期”行并合并所有记录。
输入 1:
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<DATE>2021-03-02T00:00:01.000+00:00</DATE>
<RECORD>
<ADDRESS>4006 Viking Drive</ADDRESS>
<CITY>gloveRVILLE</CITY>
<STATE>SC</STATE>
<ZIP>29828</ZIP>
<NAME>Mickey</NAME>
<TYPE>This Type</TYPE>
</RECORD>
<RECORD>
<ADDRESS>2279 Oak Street</ADDRESS>
<CITY>ROCKVILLE</CITY>
<STATE>MD</STATE>
<ZIP>20851</ZIP>
<NAME>Donald</NAME>
<TYPE>This Type</TYPE>
</RECORD>
</DATA>
输入 2:
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<DATE>2021-03-02T00:00:01.000+00:00</DATE>
<RECORD>
<ADDRESS>2759 Drainer Avenue</ADDRESS>
<CITY>Tallahassee</CITY>
<STATE>FL</STATE>
<ZIP>32301</ZIP>
<NAME>Goofy</NAME>
<TYPE>A Different Type</TYPE>
</RECORD>
<RECORD>
<ADDRESS>3352 Limer Street</ADDRESS>
<CITY>Atlanta</CITY>
<STATE>GA</STATE>
<ZIP>30303</ZIP>
<NAME>Pluto</NAME>
<TYPE>A Different Type</TYPE>
</RECORD>
</DATA>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<RECORD>
<ADDRESS>4006 Viking Drive</ADDRESS>
<CITY>gloveRVILLE</CITY>
<STATE>SC</STATE>
<ZIP>29828</ZIP>
<NAME>Mickey</NAME>
<TYPE>This Type</TYPE>
</RECORD>
<RECORD>
<ADDRESS>2279 Oak Street</ADDRESS>
<CITY>ROCKVILLE</CITY>
<STATE>MD</STATE>
<ZIP>20851</ZIP>
<NAME>Donald</NAME>
<TYPE>This Type</TYPE>
</RECORD>
<RECORD>
<ADDRESS>2759 Drainer Avenue</ADDRESS>
<CITY>Tallahassee</CITY>
<STATE>FL</STATE>
<ZIP>32301</ZIP>
<NAME>Goofy</NAME>
<TYPE>A Different Type</TYPE>
</RECORD>
<RECORD>
<ADDRESS>3352 Limer Street</ADDRESS>
<CITY>Atlanta</CITY>
<STATE>GA</STATE>
<ZIP>30303</ZIP>
<NAME>Pluto</NAME>
<TYPE>A Different Type</TYPE>
</RECORD>
</DATA>
解决方法
正如您在问题中提到的,我将您的输入作为 DataWeave 中的变量, (如果它不是来自 Scatter-Gather 的变量,那么只需调整 DWL 代码并直接从有效负载中获取输入作为有效负载 [0].payload.DATA.*RECORD 和有效负载 [1]。 payload.DATA.*RECORD)
在你的scatter-gather之后使用下面的代码,它会删除“DATE”参数,而且如果“type”参数没有出现,也不会产生任何影响
如果任何变量为空,也处理 NULL
%dw 2.0
output application/xml
var input1 = read('<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<DATE>2021-03-02T00:00:01.000+00:00</DATE>
<RECORD>
<ADDRESS>4006 Viking Drive</ADDRESS>
<CITY>GLOVERVILLE</CITY>
<STATE>SC</STATE>
<ZIP>29828</ZIP>
<NAME>Mickey</NAME>
<TYPE>This Type</TYPE>
</RECORD>
<RECORD>
<ADDRESS>2279 Oak Street</ADDRESS>
<CITY>ROCKVILLE</CITY>
<STATE>MD</STATE>
<ZIP>20851</ZIP>
<NAME>Donald</NAME>
<TYPE>This Type</TYPE>
</RECORD>
</DATA>','application/xml')
var input2 = read('<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<DATE>2021-03-02T00:00:01.000+00:00</DATE>
<RECORD>
<ADDRESS>2759 Drainer Avenue</ADDRESS>
<CITY>Tallahassee</CITY>
<STATE>FL</STATE>
<ZIP>32301</ZIP>
<NAME>Goofy</NAME>
<TYPE>A Different Type</TYPE>
</RECORD>
<RECORD>
<ADDRESS>3352 Limer Street</ADDRESS>
<CITY>Atlanta</CITY>
<STATE>GA</STATE>
<ZIP>30303</ZIP>
<NAME>Pluto</NAME>
<TYPE>A Different Type</TYPE>
</RECORD>
</DATA>','application/xml')
---
{
DATA : RECORD : (input1.DATA.*RECORD default []) ++ (input2.DATA.*RECORD default [])
}
输出:
<?xml version='1.0' encoding='UTF-8'?>
<DATA>
<RECORD>
<ADDRESS>4006 Viking Drive</ADDRESS>
<CITY>GLOVERVILLE</CITY>
<STATE>SC</STATE>
<ZIP>29828</ZIP>
<NAME>Mickey</NAME>
<TYPE>This Type</TYPE>
</RECORD>
<RECORD>
<ADDRESS>2279 Oak Street</ADDRESS>
<CITY>ROCKVILLE</CITY>
<STATE>MD</STATE>
<ZIP>20851</ZIP>
<NAME>Donald</NAME>
<TYPE>This Type</TYPE>
</RECORD>
<RECORD>
<ADDRESS>2759 Drainer Avenue</ADDRESS>
<CITY>Tallahassee</CITY>
<STATE>FL</STATE>
<ZIP>32301</ZIP>
<NAME>Goofy</NAME>
<TYPE>A Different Type</TYPE>
</RECORD>
<RECORD>
<ADDRESS>3352 Limer Street</ADDRESS>
<CITY>Atlanta</CITY>
<STATE>GA</STATE>
<ZIP>30303</ZIP>
<NAME>Pluto</NAME>
<TYPE>A Different Type</TYPE>
</RECORD>
</DATA>
我也在这里展示了如何使用 DWL 读取变量中的 XML
,假设您有由 2 个有效载荷组成的分散-聚集响应,您可以使用以下内容:
{ DATA:
(payload[0].payload.DATA ++ payload[1].payload.DATA) - "DATE"
}
由于 XML 被认为是一个对象,并且每个标记都是一个可以重复的属性,我所做的是连接两个 DATA 对象属性,然后删除 DATE 属性。然后,我将它包装在一个新的 DATA 根对象中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。