2

Websphere Message Broker: File in File out の例。繰り返し要素構造を持つ 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>

誰でもこれについて私を助けることができますか?

4

3 に答える 3

6

この計算モジュールは、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 と同じ機能をすべて備えています。

于 2014-07-14T12:03:31.073 に答える
0

このようなタイプの問題を解決する場合は、グラフィカル デバッガーを使用してみてください。これにより、ESQL コードをステップ実行し、ツリーの構築を監視できます。コードが期待どおりに動作していない場所を簡単に確認できます。

https://www-01.ibm.com/support/knowledgecenter/SSMKHH_9.0.0/com.ibm.etools.mft.doc/ag11050_.htm

于 2015-08-04T12:17:11.183 に答える