WebSphere Message Broker, Versão 8.0.0.5 Sistemas operacionais: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte as informações sobre a versão mais recente do produto em IBM Integration Bus, Versão 9.0

Acessando Atributos e Elementos

O analisador XMLNS configura o tipo de campo em cada elemento da árvore de mensagens que cria.

O tipo de campo indica o tipo de construção XML que o elemento representa. Os tipos de campo usados pelo analisador XMLNS podem ser referidos utilizando constantes com nomes prefixados com 'XML'. Constantes de tipo de campo com o prefixo 'XML' são apenas para utilização com os analisadores XMLNS e XML; elas não funcionam com os analisadores XMLNSC ou MRM.

  Constante de Tipo de Campo XMLNS
Marcação XML.Element
Atributo
XML.Attribute 
XML.Attr

Utilizando o tipo de campo desta maneira, o analisador XMLNS pode distinguir entre um elemento e um atributo que possuem o mesmo nome.

Exemplo de XML

<parent id="12345">
    <id>ABCDE</id>
</parent>

Exemplo de ESQL

SET value = FIELDVALUE(InputRoot.XMLNS.parent.(XML.Element)id)
Resultado : valor é 'ABCDE'

SET value = FIELDVALUE(InputRoot.XMLNS.parent.(XML.Attr)id)
Resultado : valor é '12345'

Exemplo Utilizando SELECT para Acessar Diversos Atributos

No Mensagem de Exemplo, o elemento Title em cada elemento Item possui três atributos: Category, Form e Edition. Por exemplo, o primeiro elemento Title contém:
<Title Category="Computer" Form="Paperback" Edition="2">The XML Companion</Title>
o elemento InputRoot.XML.Invoice.Purchases.Item[1].Title tem quatro filhos na árvore lógica: Category, Form, Edition e o elemento value, que é "The XML Companion".
Se desejar acessar os atributos para este elemento, você poderá codificar o seguinte ESQL. Esta extração de código recupera os atributos da mensagem de entrada e cria-os como elementos na mensagem de saída. Ela não processa o valor do próprio elemento neste exemplo.
-- Set the cursor to the first XML.Attribute of the Title.
-- Note the * after (XML.Attribute) meaning any name, because the name might not be known  
DECLARE cursor REFERENCE TO InputRoot.XMLNS.Invoice.Purchases.Item[1].Title.(XML.Attribute)*;  
WHILE LASTMOVE(cursor) DO     
-- Create a field with the same name as the XML.Attribute
-- and set its value to the value of the XML.Attribute                                             
  SET OutputRoot.XML.Data.Attributes.{FIELDNAME(cursor)} = FIELDVALUE(cursor);  
-- Move to the next sibling of the same TYPE to avoid the Title value        
-- which is not an XML.Attribute                                                 
  MOVE cursor NEXTSIBLING REPEAT TYPE; 
END WHILE;
Quando este ESQL é processado pelo nó Compute, a seguinte mensagem de saída é gerada:
<Data>
  <Attributes>
    <Category>Computer</Category>
    <Form>Paperback</Form>
    <Edition>2</Edition>
  </Attributes>
</Dados>
Você também pode utilizar uma instrução 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 instrução gera a seguinte mensagem de saída:
<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>
</Dados>
Você pode qualificar SELECT com uma instrução WHERE para estreitar os resultados para obter a mesma mensagem de saída que a que foi gerada pela instrução WHILE. Este segundo exemplo mostra que você pode criar os mesmos resultados com menos ESQLs e menos complexos.
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 instrução gera a seguinte mensagem de saída:
<Data>
  <Attributes>
    <Category>Computer</Category>
    <Form>Paperback</Form>
    <Edition>2</Edition>
  </Attributes>
  </Dados>
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

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

        
        Última atualização:
        
        Última atualização: 2015-02-28 18:28:54


Tópico de ConceitoTópico de Conceito | Versão 8.0.0.5 | ac67241_