Acceder a atributos en mensajes XML

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)
En el mensaje Invoice de ejemplo, el elemento Title de cada elemento Item tiene tres atributos: Category, Form y Edition. Por ejemplo, el primer elemento Title contiene:
<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>
También puede utilizar una sentencia SELECT:
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);
Esto 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>

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');
Esto genera el siguiente mensaje de salida:
<Data>
  <Attributes>
    <Category>Computer</Category>
    <Form>Paperback</Form>
    <Edition>2</Edition>
  </Attributes>
</Data>
Conceptos relacionados
Visión general de flujos de mensajes
Visión general de ESQL
Modelado de mensajes
Tareas relacionadas
Diseñar un flujo de mensajes
Definir el contenido del flujo de mensajes
Gestión de archivos ESQL
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
Referencia de ESQL
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac17270_