Accesso agli attributi nei messaggi XML

I messaggi XML consistono in una sequenza di elementi con formato e contenuto delimitato da tag. Molte tag XML includono anche informazioni espresse nel formato di attributi associati. Il valore dell'elemento, e tutti gli attributi che può avere un elemento, sono considerati nella struttura ad albero come child dell'elemento.

La seguente tabella elenca il nome di correlazione da utilizzare per fare riferimento agli attributi.

Elemento sintassi Nome di correlazione
Attributo (XML.Attribute) - è supportato anche (XML.attr)
Nel messaggio di esempio relativo alla fattura, l'elemento Title all'interno di ogni elemento Item ha tre attributi: Category, Form ed Edition. Ad esempio, il primo elemento Title contiene:
<Title Category="Computer" Form="Paperback" Edition="2">The XML Companion</Title>

L'elemento InputRoot.XML.Invoice.Purchases.Item[1].Title ha quattro child nella struttura ad albero logica: Category, Form, Edition ed il valore dell'elemento, che è The XML Companion.

Se si desidera accedere agli attributi relativi a questo elemento, è possibile codificare il seguente ESQL. Questo estratto di codice richiama gli attributi dal messaggio di input e li crea come elementi nel messaggio di output. Esso non elabora il valore dell'elemento stesso in questo esempio.

-- Impostare il cursore sul primo XML.Attribute di Title, notare che * dopo 
-- (XML.Attribute) indica qualsiasi nome, poiché il nome potrebbe essere sconosciuto

DECLARE cursor REFERENCE TO InputRoot.XML.Invoice.Purchases.Item[1]
               .Title.(XML.Attribute)*;

WHILE LASTMOVE(cursor) DO

   -- Creare un campo con lo stesso nome di XML.Attribute e impostarne il valore 
   -- sul valore di XML.Attribute                                        

   SET OutputRoot.XML.Data.Attributes.{FIELDNAME(cursor)} = FIELDVALUE(cursor);

-- Spostarsi al sibling successivo dello stesso TYPE per evitare il valore Title       
-- che non è un XML.Attribute                                            

   MOVE cursor NEXTSIBLING REPEAT TYPE;
END WHILE;

Quando questo ESQL è elaborato dal nodo Compute, viene generato il seguente messaggio di output:

<Data>
  <Attributes>
    <Category>Computer</Category>
    <Form>Paperback</Form>
    <Edition>2</Edition>
  </Attributes>
</Data>
E' possibile utilizzare anche un'istruzione 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);
Si genera il seguente messaggio di output:
<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>

E' possibile qualificare SELECT con un'istruzione WHERE per restringere i risultati in modo da ottenere un messaggio di output uguale a quello generato dall'istruzione WHILE. Questo secondo esempio dimostra che è possibile creare gli stessi risultati con un ESQL più ridotto e meno complesso.

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');
Si genera il seguente messaggio di output:
<Data>
  <Attributes>
    <Category>Computer</Category>
    <Form>Paperback</Form>
    <Edition>2</Edition>
  </Attributes>
</Data>
Concetti correlati
Panoramica dei flussi di messaggi
Panoramica di ESQL
Creazione di modelli di messaggio
Attività correlate
Progettazione di un flusso di messaggi
Definizione del contenuto del flusso di messaggi
Gestione dei file ESQL
Riferimenti correlati
Nodo Compute
Nodo Database
Nodo Filter
Riferimento ESQL
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac17270_