Zugriff auf Attribute in XML-Nachrichten

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
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
Einen Nachrichtenfluss entwerfen
Nachrichtenflussinhalte definieren
ESQL-Dateien verwalten
Zugehörige Verweise
Rechenknoten (Compute)
Datenbankknoten (Database)
Filterknoten
ESQL-Referenz
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ac17270_