El analizador XMLNS establece el tipo de campo en cada elemento del árbol de mensajes que crea.
El tipo de campo indica el tipo de creación XML que el elemento representa. Los tipos de campos que el analizador XMLNS utiliza se pueden referenciar mediante constantes con nombres cuyo prefijo es ‘XML.' Las constantes de tipo de campo que tienen el prefijo ‘XML.' sólo sirven para los analizadores XMLNS y XML; no funcionan con los analizadores XMLNSC o MRM.
Constante de tipo de campo XMLNS | |
---|---|
Código | XML.Element |
Atributo |
|
Utilizando el tipo de campo de esta manera, el analizador XMLNS puede distinguir entre un elemento y un atributo que tenga el mismo nombre.
Ejemplo de XML
<parent id="12345">
<id>ABCDE</id>
</parent>
Ejemplo de ESQL
SET value = FIELDVALUE(InputRoot.XMLNS.parent.(XML.Element)id)
Result : value is 'ABCDE'
SET value = FIELDVALUE(InputRoot.XMLNS.parent.(XML.Attr)id)
Result : value is '12345'
<Title Category="Computer" Form="Paperback" Edition="2">The XML Companion</Title>
El elemento InputRoot.XML.Invoice.Purchases.Item[1].Title tiene cuatro hijos en el árbol lógico: Category, Form, Edition y el valor de elemento, que es “The XML Companion”.-- Establecer el cursor en el primer XML.Attribute de Title.
-- Observe que * después de (XML.Attribute) significa cualquier nombre, porque puede que el nombre no sea conocido
DECLARE cursor REFERENCE TO InputRoot.XMLNS.Invoice.Purchases.Item[1].Title.(XML.Attribute)*;
WHILE LASTMOVE(cursor) DO
-- Crear un campo con el mismo nombre que XML.Attribute
-- y establecer el valor en el valor de XML.Attribute
SET OutputRoot.XML.Data.Attributes.{FIELDNAME(cursor)} = FIELDVALUE(cursor);
-- Moverse al siguiente hermano del mismo TYPE para evitar el valor Title
-- que no es un XML.Attribute
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);
Esta sentencia genera el siguiente mensaje de
salida:<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');
Esta sentencia genera el siguiente mensaje de salida:<Data>
<Attributes>
<Category>Computer</Category>
<Form>Paperback</Form>
<Edition>2</Edition>
</Attributes>
</Data>