Mit Elementen des Typs xsd:: list arbeiten

In XML-Schemas sind Elemente oder Attribute zulässig, die eine Liste mit Werten beinhalten, die auf einem einfachen Typ mit einzelnen durch Leerzeichen getrennten Werten basieren.

Betrachten Sie die folgende XML-Eingabenachricht:
   <message1>
     <listE1 listAttr="one two three"> four five six</listE1>
   </message1> 

In der daraus resultierenden Nachrichtenbaumstruktur wird der Typ xsd::list als ein Knotenname mit einem anonymen untergeordneten Wertelement für jeden Listeneintrag dargestellt. Dies ermöglicht die Bearbeitung sich wiederholender Listen, ohne dass Informationen verloren gehen.

Sich wiederholende Listen erscheinen als gleichgeordnete Namenselemente, von denen jedes seine eigenen anonymen untergeordneten Wertknoten für seine jeweiligen Listeneinträge hat.Die vorherige Beispielnachricht generiert die folgende logische Baumstruktur:
   MRM	   	listEl  (Name)
		     	listAttr (Name)
			        "one"   (Wert)
			        "two"   (Wert)
			        "three" (Wert)
		       "four" (Wert)
		       "five" (Wert)
		       "six"  (Wert)
Auf einzelne Listeneinträge kann als ElementName.*[n] zugegriffen werden. Beispiel:
  SET OutputRoot.MRM.listEl.listAttr.*[3] = ...
ändert das dritte Element von listAttr.

Zuordnung einer Liste zu einem sich wiederholendem Element

Betrachten Sie das Format der folgenden XML-Eingabenachricht:
   <MRM>
     <inner>abcde fghij 12345</inner>
   </MRM> 
. Dabei ist dem Element 'inner' der Typxsd::list zugeordnet. Ihm sind also drei Zeichenfolgewerte anstatt eines einzelnen Werts zugeordnet.
Wenn Sie die drei Werte in eine Ausgabenachricht kopieren möchten, in der jeder Wert einer Instanz der sich wiederholenden Elemente zugeordnet ist,
   <MRM>
     <str1>abcde</str1>
     <str1>fghij</str1>
     <str1>12345</str1>
   </MRM> 
wird davon ausgegangen, dass die folgende ESQL-Syntax gültig ist:
   DECLARE D INTEGER;
   SET D = CARDINALITY(InputBody.str1.*[]);
   DECLARE M INTEGER 1;
   WHILE M <= D DO
      SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];
      SET M = M + 1;
   END WHILE;
Die Anweisung
   SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];
fordert eine Kopie der Baumstruktur von der Quelle in das Ziel an.Da das Zielelement noch nicht vorhanden ist, wird es erstellt und der zugehörige Wert und Typ werden von der Quelle aus definiert.

Dies ist mit Verhalten von ESQL konsistent, jedoch können Pseudo-Gültigkeitsfehlerauftreten, wenn den Elementen der Typ list zugeordnet ist.

Um dieses Problem zu vermeiden, wird die Verwendung derFIELDVALUE-Funktion empfohlen, um nur den Wert des Quellenelements explizit abzurufen. Beispiel:
      SET OutputRoot.MRM.str1[M] = FIELDVALUE(InputBody.inner.*[M]);
Zugehörige Tasks
ESQL erstellen
Zugriff auf Elemente im Nachrichtenhauptteil
Zugehörige Verweise
SET-Anweisung
FIELDVALUE-Funktion
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ak05141_