如何合并两个 XML 变量

How do I merge two XML variables

分散-收集的输出是两个变量,具有相同格式的 XML 文件。我现在需要将这两个文件合并为一个。实验和搜索没有找到任何合并两个 XML 文件的示例代码。

输入 1 来自一个报告过程,输入 2 来自另一个报告。除“TYPE”参数外,格式始终相同。我想删除“DATE”行并合并所有记录。

输入 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>

假设您有包含 2 个有效负载的分散-聚集响应,您可以使用如下内容:

{ DATA: 
    (payload[0].payload.DATA ++ payload[1].payload.DATA) - "DATE"
}

由于 XML 被视为一个对象,每个标签都是一个可以重复的属性,我正在做的是加入两个 DATA 对象属性,然后删除 DATE 属性。然后,我将它包装在一个新的 DATA 根对象中。

正如您在问题中提到的,我将您的输入作为 DataWeave 中的一个变量, (如果 它不是来自 Scatter-Gather 的变量 ,那么只需调整 DWL 代码并直接从有效负载获取输入作为有效负载 [0].payload.DATA.*RECORD 和payload[1].payload.DATA.*RECORD)

在你的分散-聚集之后使用下面的代码,它会删除“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