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) |
<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>
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>
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');
<Data> <Attributes> <Category>Computer</Category> <Form>Paperback</Form> <Edition>2</Edition> </Attributes> </Data>