当我们在与交易伙伴进行业务往来时,若供应商传输的XML文件包含一批数据,例如多个订单、多个行项目或多个客户记录时,想要将每个订单/项目/记录从这个“批量”的XML数据中拆分出来。该如何实现呢?
知行之桥EDI平台提供了Split端口可实现XML文件的拆分,具体操作步骤可参考如下视频:
本篇文章将带大家学习在EDI系统中如何使用Split端口实现XML文件拆分。
端口功能
Split端口可以将单个XML文件拆分为多个XML文件。通过元素的Xpath路径进行XML文件拆分,在XML结构中指定Xpath,每次出现都会产生一个唯一的输出文件,该文件仍为XML文件。
实例
某客户在调用知行API接口上传订单数据时,想只调用一次在同一个XML中包含多组订单文件,但是交易伙伴每次只能接收一个订单文件,那么这个时候就需要用到Split端口了。
示例一
XML输入文件:
1 2 3 4 5 6 7 8 9 10 11 |
<Items> <Interchange> <Id>1</Id> <TransactionSet> <Data>value1</Data> </TransactionSet> <TransactionSet> <Data>value2</Data> </TransactionSet> </Interchange> </Items> |
这是一个包含2个事务开始元素TransactionSet的XML文件。第一个TransactionSet对应的data为value1,第二个TransactionSet对应的data为value2。通过Split端口可以将该文件拆分为两个独立的输出文件,每个事务开始元素TransactionSet对应一个输出文件。
因此,应该将Xpath字段设置为TransactionSet元素的路径,即Xpath为/Items/Interchange/TransactionSet。
将产生以下两个输出文件,第一个文件中data值为value1,第二个文件中data值为value2。通过元素TransactionSet的路径将该XML文件进行拆分。
输出文件1:
1 2 3 4 5 6 7 8 |
<Items> <Interchange> <Id>1</Id> <TransactionSet> <Data>value1</Data> </TransactionSet> </Interchange> </Items> |
输出文件2:
1 2 3 4 5 6 7 8 |
<Items> <Interchange> <Id>1</Id> <TransactionSet> <Data>value2</Data> </TransactionSet> </Interchange> </Items> |
示例二
但是,在实际的数据传输中,可能输入的XML文件包含需要拆分成单独文件的多组数据,而这些数据组具有不同的元素名称。 如以下这个XML输入文件中的Group1、Group2和Group3。
1 2 3 4 5 6 7 8 9 10 11 |
<Items> <Group1> <Data>value1</Data> </Group1> <Group2> <Data>value2</Data> </Group2> <Group3> <Data>value3</Data> </Group3> </Items> |
那么如何将这种包含不同元素名称数据组的XML文件进行拆分呢?
Split端口的Xpath可以包含通配符(*),以便在给定的XPath上拆分所有元素。
因此,可以通过将这个示例中的XPath设置为/Items/* 来拆分这些元素名称不同的数据组。
将产生以下的三个输出文件,第一个文件的data值为value1、第二个文件的data值为value2,第三个文件的data值为value3。实现了拆分包含元素名称不同数据组的XML文件。
输出文件1:
1 2 3 4 5 |
<Items> <Group1> <Data>value1</Data> </Group1> </Items> |
输出文件2:
1 2 3 4 5 |
<Items> <Group2> <Data>value2</Data> </Group2> </Items> |
输出文件3:
1 2 3 4 5 |
<Items> <Group3> <Data>value3</Data> </Group3> </Items> |
演示
在知行之桥的页面,左侧端口中找到Split端口,拖入工作区。
在Split端口的自动化选项卡中,取消端口的自动发送,目的是防止文件被系统自动发送。
示例一
打开示例一文件,该文件包含2个事务开始元素TransactionSet,每个事务开始元素TransactionSet对应一个输出文件。
因此,应该将xpath设置为TransactionSet元素的路径,即/Items/Interchange/TransactionSet。点击Split端口,输入xpath,如下图所示:
点击输入选项卡,上传示例1文件,点击发送,如下图所示:
在输出选项卡中,产生了2个输出文件,这2个文件是以源文件名+序号的规则进行命名的,如下图所示:
下载消息并打开,可以看到通过元素TransactionSet的路径,该XML文件被拆分成了2个输出文件,如下图所示:
示例二
打开示例二文件,该XML输入文件的数据组具有不同的元素名称:group1、group2、group3,每一个数据组对应一个输出文件。而Split端口的Xpath可以包含通配符(*),以便在给定的XPath上拆分所有元素。
因此,应该将 XPath设置为/Items/*,来拆分这些元素名称不同的数据组。
点击Split端口,输入Xpath,如下图所示:
点击输入选项卡,上传示例2文件,点击发送,如下图所示:
在输出选项卡中,产生了3个输出文件,这3个文件是以源文件名+序号的规则进行命名的,如下图所示:
下载消息并打开,可以看到即便是数据组名称不同,也可以将XML文件进行拆分。该XML文件被拆分成了3个输出文件,如下图所示:
注:文案部分图片及内容来源于网络,版权归原创作者所有,如有侵犯到您的权益,请您联系我们进行删除,给您带来困扰,我们深感抱歉。