WebSphere Message Broker, Versión 8.0.0.5 Sistemas operativos: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte la información sobre la última versión del producto en IBM Integration Bus, Versión 9.0

Acceso a atributos y elementos

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
XML.Attribute 
XML.Attr

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'

Ejemplo mediante SELECT para acceder a varios atributos

En el Mensaje 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.
-- 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;
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.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>
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.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>
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Comentarios

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última actualización:
        
        Última actualización: 2015-02-28 16:58:56


Tema de conceptoTema de concepto | Versión 8.0.0.5 | ac67241_