Zugriff auf Attribute in XML-Nachrichten

XML-Nachrichten bestehen aus einer Folge von Elementen, bei denen Format und Inhalt durch Tags begrenzt sind.

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

In der Beispielnachricht 'Invoice' hat das Element 'Title' innerhalb jedes Item-Elements drei Attribute: Category, Form und Edition. Das erste Title-Element enthält beispielsweise Folgendes:
<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>
Sie können auch eine SELECT-Anweisung verwenden:
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);
Dies führt zur Generierung der folgenden Ausgabenachricht:
<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');
Dies führt zur Generierung der folgenden Ausgabenachricht:
<Data>
  <Attributes>
    <Category>Computer</Category>
    <Form>Paperback</Form>
    <Edition>2</Edition>
  </Attributes>
</Data>
Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
Übersicht zu ESQL
Nachrichten modellieren
Zugehörige Tasks
Nachrichtenfluss entwerfen
Nachrichtenflussinhalte definieren
ESQL-Dateien verwalten
Zugehörige Verweise
Compute-Knoten
Database-Knoten
Filter-Knoten
ESQL-Referenz
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Letzte Aktualisierung : 2009-02-17 15:28:21

ac17270_