Der XMLNS-Parser setzt den Feldtyp für jedes von ihm erstellte Element in der Nachrichtenbaumstruktur.
Der Feldtyp gibt den Typ des XML-Konstrukts an, den das Element darstellt. Auf die vom XMLNS-Parser verwendeten Feldtypen kann mit Konstanten verwiesen werden, deren Namen das Präfix 'XML.' vorangestellt ist. Feldtypkonstanten mit dem Präfix 'XML.' werden nur in Zusammenhang mit den XMLNS- und XML-Parsern verwendet; sie können nicht mit den XMLNSC- oder MRM-Parsern verwendet werden.
XMLNS-Feldtypkonstante | |
---|---|
Tag | XML.Element |
Attribut |
|
Bei dieser Verwendung des Feldtyps kann der XMLNS-Parser zwischen einem Element und einem Attribut desselben Namens unterscheiden.
Beispiel-XML
<parent id="12345">
<id>ABCDE</id>
</parent>
Beispiel-ESQL
SET value = FIELDVALUE(InputRoot.XMLNS.parent.(XML.Element)id)
Ergebnis: Wert ist 'ABCDE'
SET value = FIELDVALUE(InputRoot.XMLNS.parent.(XML.Attr)id)
Ergebnis: Wert ist '12345'
<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 "The XML Companion".-- Cursor auf das erste Element XML.Attribute von Title setzen.
-- Der Stern (*) hinter (XML.Attribute) steht für einen Namen, da dieser möglicherweise nicht bekannt ist
DECLARE cursor REFERENCE TO InputRoot.XMLNS.Invoice.Purchases.Item[1].Title.(XML.Attribute)*;
WHILE LASTMOVE(cursor) DO
-- Ein Feld mit demselben Namen wie XML.Attribute erstellen
-- und dessen Wert auf den von XML.Attribute setzen
SET OutputRoot.XML.Data.Attributes.{FIELDNAME(cursor)} = FIELDVALUE(cursor);
-- Weiter mit dem 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;
<Data>
<Attributes>
<Category>Computer</Category>
<Form>Paperback</Form>
<Edition>2</Edition>
</Attributes>
</Data>
SET OutputRoot.XMLNS.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);
Mit dieser Anweisung wird
folgende Ausgabenachricht generiert:<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>
SET OutputRoot.XMLNS.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');
Mit dieser Anweisung wird folgende
Ausgabenachricht generiert:<Data>
<Attributes>
<Category>Computer</Category>
<Form>Paperback</Form>
<Edition>2</Edition>
</Attributes>
</Data>