您可以使用 ESQL 配置节点,以多种方式来复制重复字段。
请查看包含重复结构的输入 XML 消息:
... <Field_top> <field1></field1> <field1></field1> <field1></field1> <field1></field1> <field1></field1> </Field_top> .....
不能使用以下语句复制以上整个结构字段:
SET OutputRoot.XML.Output_top.Outfield1 = InputRoot.XML.Field_top.field1;
该语句仅复制第一个重复,因此会和以下语句产生相同的结果:
SET OutputRoot.XML.Output_top.Outfield1[1] = InputRoot.XML.Field_top.field1[1];
您可以复制循环内的字段,使用输入字段的 CARDINALITY 控制迭代:
SET I = 1; SET J = CARDINALITY(InputRoot.XML.Field_top.field1[]); WHILE I <= J DO SET OutputRoot.XML.Output_top.Outfield1[I] = InputRoot.XML.Field_top.field1[I]; SET I = I + 1; END WHILE;
当从输入字段复制输出消息的每个字段时,如果要对它进行修改(例如,对它添加数字或将它的内容合并为大写),或输出消息的每个字段复制之后要对它进行修改,此方法可能适用。如果输出消息已经包含了比输入消息中现有更多的 Field1 字段,循环将不会修改剩余的字段,并且这些字段将保留在输出消息中。
以下单个语句将输入字段的迭代复制到输出字段中,并删除输出消息中的任何剩余字段。
SET OutputRoot.XML.Output_top.Outfield1.[] = InputRoot.XML.Field_top.field1[];
以下示例显示了将元素复制到输出树时如何对它们重新命名。此语句不会跨源元素名称复制,因此每个 field1 元素都将变为 Target 元素。
SET OutputRoot.XML.Output_top.Outfield1.Target[] = (SELECT I FROM InputRoot.XML.Field_top.field1[] AS I );
下一个示例显示了一种不同的方法来执行相同的操作;它产生相同的最终结果。
SET OutputRoot.XML.Output_top.Outfield2.Target[] = InputRoot.XML.Field_top.field1[];
以下示例将跨源元素名称进行复制。每个 field1 元素都在 Target 元素下保留为 field1 元素。
SET OutputRoot.XML.Output_top.Outfield3.Target.[] = InputRoot.XML.Field_top.field1[];
此示例是实现相同结果的一种候选方法,在 Target 元素下创建 field1 元素。
SET OutputRoot.XML.Output_top.Outfield4.Target.*[] = InputRoot.XML.Field_top.field1[];
这些示例显示了可以编写 ESQL 代码将重复字段从源复制到目标的几种方法。请选择最合适的方法实现您需要的结果。
此处显示的主体对您可以写入数据的消息树的所有区域都同样适用,而不只是输出消息树。