XML メッセージは、エレメントのシーケンス、およびフォームとタグで区切られた内容から構成されています。 多くの XML タグにも、関連する属性という形で情報が含まれています。 エレメント値、およびエレメントに属する任意の属性は、エレメントの子としてツリー内で扱われます。
次の表には、属性を参照するのに使用しなければならない相関名がリストされています。
構文エレメント | 相関名 |
---|---|
Attribute | (XML.Attribute) - (XML.attr) もサポートされます |
<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>
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>