XML-Nachrichten bestehen aus einer Folge von Elementen, bei denen Format und Inhalt durch Tags begrenzt ist. Viele XML-Tags enthalten auch Informationen in Form von zugehörigen Attributen. Der Elementwert sowie alle Attribute des Elements werden in der Baumstruktur als untergeordnete Elemente des Elements behandelt.
In der folgenden Tabelle ist der Korrelationsname aufgeführt, den Sie für den Verweis auf Attribute verwenden müssen.
Syntaxelement | Korrelationsname |
---|---|
Attribut | (XML.Attribute) - (XML.attr) wird ebenfalls unterstützt |
<Title Category="Computer" Form="Paperback" Edition="2">The XML Companion</Title>
Das Element 'InputRoot.XML.Invoice.Purchases.Item[1].Title' hat in der logischen Baumstruktur vier untergeordnete Elemente: Category, Form, Edition und den Elementwert (in diesem Fall 'The XML Companion').
Wenn Sie auf die Attribute für dieses Element zugreifen möchten, können Sie den folgenden ESQL-Code schreiben. Dieser Codeauszug ruft die Attribute aus der Eingabenachricht ab und erstellt sie als Elemente in der Ausgabenachricht. Der Wert des Elements selbst wird in diesem Beispiel nicht verarbeitet.
-- Setzen des Cursors auf das erste XML.Attribute des Titels. Der * nach -- (XML.Attribute) steht für einen Namen, da dieser möglicherweise nicht bekannt ist DECLARE cursor REFERENCE TO InputRoot.XML.Invoice.Purchases.Item[1].Title.(XML.Attribute)*; WHILE LASTMOVE(cursor) DO -- Erstellen eines Felds mit demselben Namen wie XML.Attribute und Setzen dessen Werts -- auf den Wert von XML.Attribute SET OutputRoot.XML.Data.Attributes.{FIELDNAME(cursor)} = FIELDVALUE(cursor); -- Übergang zum nächsten gleichgeordneten Element desselben Typs (TYPE), um den -- Wert 'Title' zu vermeiden, der kein XML.Attribute ist MOVE cursor NEXTSIBLING REPEAT TYPE; END WHILE;
Wenn dieser ESQL-Code vom Rechenknoten verarbeitet wird, wird die folgende Ausgabenachricht generiert:
<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>
Sie können SELECT mit einer WHERE-Anweisung näher qualifizieren, um die Ergebnisse zu reduzieren und dieselbe Ausgabenachricht zu erhalten wie diejenige, die von der WHILE-Anweisung generiert wird. Dieses zweite Beispiel zeigt, dass Sie dieselben Ergebnisse mit weniger und nicht ganz so komplexem ESQL-Code erreichen können.
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>