XML メッセージの属性へのアクセス

XML メッセージは、エレメントのシーケンス、およびフォームとタグで区切られた内容から構成されています。 多くの XML タグにも、関連する属性という形で情報が含まれています。 エレメント値、およびエレメントに属する任意の属性は、エレメントの子としてツリー内で扱われます。

次の表には、属性を参照するのに使用しなければならない相関名がリストされています。

構文エレメント 相関名
Attribute (XML.Attribute) - (XML.attr) もサポートされます
Invoice メッセージの例では、各 Item エレメント内の Title エレメントには、3 つの属性、Category、Form、および Edition があります。 例えば、最初の Title エレメントは次のようになっています。
<Title Category="Computer" Form="Paperback" Edition="2">The XML Companion</Title>

エレメント InputRoot.XML.Invoice.Purchases.Item[1].Title には論理ツリーに 4 つの子、Category、Form、Edition、およびエレメント値 The XML Companion があります。

このエレメントの属性にアクセスする場合には、次の ESQL をコーディングできます。 コードのこの抽出により入力メッセージから属性を取り出し、それらを出力メッセージにエレメントとして作成します。 この例では、エレメント自体の値は処理しません。

-- Set the cursor to the first XML.Attribute of the Title, note the * after
-- (XML.Attribute) meaning any name, because the name might not be known

DECLARE cursor REFERENCE TO InputRoot.XML.Invoice.Purchases.Item[1]
.Title.(XML.Attribute)*;
WHILE LASTMOVE(cursor) DO

   -- Create a field with the same name as the XML.Attribute and set its value
   -- to the value of the XML.Attribute

   SET OutputRoot.XML.Data.Attributes.{FIELDNAME(cursor)} = FIELDVALUE(cursor);

-- Move to the next sibling of the same TYPE to avoid the Title value
-- which is not an XML.Attribute

   MOVE cursor NEXTSIBLING REPEAT TYPE;
END WHILE;

この ESQL が Compute ノードで処理されると、次の出力メッセージが生成されます。

<Data>
  <Attributes>
    <Category>Computer</Category>
    <Form>Paperback</Form>
    <Edition>2</Edition>
  </Attributes>
</Data>
また SELECT ステートメントも使用できます。
SET OutputRoot.XML.Data.Attributes[] =
    (SELECT FIELDVALUE(I.Title) AS title,
            FIELDVALUE(I.Title.(XML.Attribute)Category) AS category,
            FIELDVALUE(I.Title.(XML.Attribute)Form) AS form,
            FIELDVALUE(I.Title.(XML.Attribute)Edition) AS edition
     FROM InputRoot.XML.Invoice.Purchases.Item[] AS I);
これによって、次の出力メッセージが生成されます。
<Data>
  <Attributes>
    <title>The XML Companion</title>
    <category>Computer</category>
    <form>Paperback</form>
    <edition>2</edition>
  </Attributes>
  <Attributes>
    <title>A Complete Guide to DB2 Universal Database</title>
    <category>Computer</category>
    <form>Paperback</form>
    <edition>2</edition>
  </Attributes>
  <Attributes>
    <title>JAVA 2 Developers Handbook</title>
    <category>Computer</category>
    <form>Hardcover</form>
    <edition>0</edition>
  </Attributes>
</Data>

SELECT を WHERE ステートメントで修飾して結果を限定し、WHILE ステートメントで生成した場合と同じ出力メッセージを取得するようにできます。 この 2 番目の例は、より少なく、より簡潔な ESQL で同じ結果を得られることを示しています。

SET OutputRoot.XML.Data.Attributes[] =
    (SELECT FIELDVALUE(I.Title.(XML.Attribute)Category) AS category,
            FIELDVALUE(I.Title.(XML.Attribute)Form) AS form,
            FIELDVALUE(I.Title.(XML.Attribute)Edition) AS edition
     FROM InputRoot.XML.Invoice.Purchases.Item[] AS I
     WHERE I.Title = 'The XML Companion');
これによって、次の出力メッセージが生成されます。
<Data>
  <Attributes>
    <Category>Computer</Category>
    <Form>Paperback</Form>
    <Edition>2</Edition>
  </Attributes>
</Data>
関連概念
メッセージ・フローの概要
ESQL の概要
メッセージのモデル化
関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理
関連資料
Compute ノード
Database ノード
Filter ノード
ESQL 参照
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac17270_