我有一个任务,要将多个 XML 文件插入到表中。
我已成功在 ADF 中设置了一条运行良好的管道。但现在我发现很少有文件没有插入。它们并没有失败,只是没有被插入。
我现在意识到,没有插入任何数据的文件只有 OrdinaryCargo 中的一项被用作 Collectionreference。大多数文件中都有 2 个或更多 OrdinaryCargo。
这是“普通”文件的示例。这个有效
此文件不起作用
除了 OrdinaryCargo 数量不同外,文件的结构完全相同。
我的问题是如何从只有一个 OrdinaryCargo 的文件中插入数据,我仍然可以使用带有集合引用的方法还是需要以不同的方式进行操作? 有没有一种方法可以让我先检查文件中的内容,然后根据 OrdinaryCargos 的数量选择不同的方式来扁平化数据?
XML 中的单行被转换为对象而不是数组。当您将集合引用中的数组元素作为通用管道提供时,这可能会出现问题。解决这个问题的更好方法是将它们分叉并提供两个复制活动 - 一个具有数组的源 xml,另一个不具有数组(单行)。
@string(activity('Lookup1').output.value[0].PortCall.MessageList.CargoList.OrdinoCargo.OC_TransportUnit)
然后采用 if 条件活动,并将表达式指定为
@startswith(variables('<variable-name>'),'[')
。这会检查结果字符串是否以 [
开头。如果为 true,则源 XML 具有元素数组。如果为 false,则它只有一个对象。
给出两种不同的复制活动 - 一种用于真实情况,另一种用于错误情况,两种情况都有不同的映射。