xml - Websphere 消息代理 : Accessing XML elements in ESQL

标签 xml ibm-mq messagebroker ibm-integration-bus extended-sql

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/

相关文章:

python - 加快读取 xml 文件的速度

c# - 在 LINQ 和 C# 中从 XML 文件中检索节点值

ibm-mq - 远程 MQ 服务器身份验证

configuration - JBoss 与 IBM MQ 的消息驱动 bean 外部配置

apache-kafka - Kafka清理分区后是否将偏移量更改为0?

activemq - 如何让我的 ActiveMQ 代理删除离线持久订阅者

xml - 包含 U+001A 的 XML 文档的编码

java - JAXB/XJC - XML 模式解析失败

ibm-cloud - 使用 Mulesoft (Mule 4) 使用 IBM MQ 时出现身份验证问题

java - 为不可根消息创建队列