Websphere Message Broker:文件输入文件输出示例。 我有一个具有重复元素结构的 XML 文件。我如何访问和修改 ESQL 中特定元素的值。 我写了以下代码..
CREATE PROCEDURE CopyEntireMessage() BEGIN
--SET OutputRoot = InputRoot;
DECLARE I INTEGER 1;
DECLARE J INTEGER;
SET J = CARDINALITY(OutputRoot.*[]);
WHILE I < J DO
SET OutputRoot = InputRoot;
SET OutputRoot.XMLNS.person.student[I].name = 'XYZ';
SET I = I + 1;
END WHILE;
END;
但是它不起作用。从输入文件夹中提取文件,但我在输出文件夹中看不到任何内容。 但是如果我评论
SET OutputRoot.XMLNS.student[I].name = 'XYZ';
然后文件在输出文件夹中可用,因为它没有任何变化。
我的 XML 文件如下
<person>
<student>
<name>ABC</name>
<age>20</age>
<address>city1</address>
</student>
<student>
<name>PQR</name>
<age>20</age>
<address>city2</address>
</student>
</person>
谁能帮我解决这个问题?
最佳答案
这个计算模块应该做你需要的,在 linux 上的 9001 测试:
CREATE COMPUTE MODULE FileInputOutput_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
-- CALL CopyMessageHeaders();
CALL CopyEntireMessage();
FOR source AS OutputRoot.XMLNSC.person.student[] DO
SET source.name = 'XYZ';
END FOR;
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER;
SET J = CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
CREATE PROCEDURE CopyEntireMessage() BEGIN
SET OutputRoot = InputRoot;
END;
END MODULE;
注意事项,首先,重新定义自动生成的过程不是好的做法,如果您需要重用设置消息中每个字段的功能,那么创建一个新过程来执行此操作是明智的。
XMLNS 也已弃用,因此请改用 XMLNSC,它具有更高的性能并具有与 XMLNS 相同的所有功能,后者仅保留用于支持遗留应用程序。
关于xml - Websphere 消息代理 : Accessing XML elements in ESQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24695996/