复制重复字段

您可以使用 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 代码将重复字段从源复制到目标的几种方法。请选择最合适的方法实现您需要的结果。

此处显示的主体对您可以写入数据的消息树的所有区域都同样适用,而不只是输出消息树。

相关概念
消息流概述
ESQL 概述
相关任务
设计消息流
管理 ESQL 文件
相关参考
Compute 节点
Database 节点
Filter 节点
ESQL 引用
SET 语句
WHILE 语句
CARDINALITY 函数
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac20420_