Los mensajes XML constan de una secuencia de elementos con formato y contenido delimitados por códigos. Muchos códigos XML también incluyen información en forma de atributos asociados. El valor de elemento y los atributos que pueda tener el elemento se tratan en el árbol como hijos del elemento.
La tabla siguiente lista el nombre de correlación que debe utilizar para hacer referencia a los atributos.
Elemento de sintaxis | Nombre de correlación |
---|---|
Attribute | (XML.Attribute) - también se soporta (XML.attr) |
<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.
Si desea acceder a los atributos de este elemento, puede codificar el ESQL siguiente. Este extracto de código recupera los atributos del mensaje de entrada y los crea como elementos en el mensaje de salida. En este ejemplo, no procesa el valor del propio elemento.
-- Establecer el cursor en el primer XML.Attribute de Title, observar el * después de -- (XML.Attribute) que significa cualquier nombre, porque es posible que no se conozca el nombre DECLARE cursor REFERENCE TO InputRoot.XML.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;
Cuando el nodo Compute procesa este ESQL, se genera el siguiente mensaje de salida:
<Data> <Attributes> <Category>Computer</Category> <Form>Paperback</Form> <Edition>2</Edition> </Attributes> </Data>
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);
<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>
Puede calificar SELECT con una sentencia WHERE a fin de limitar los resultados para obtener el mismo mensaje de salida que el generado por la sentencia WHILE. Este segundo ejemplo muestra que puede crear los mismos resultados utilizando una menor cantidad de ESQL menos complejo.
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');
<Data> <Attributes> <Category>Computer</Category> <Form>Paperback</Form> <Edition>2</Edition> </Attributes> </Data>