Cuando haga referencia a elementos de un cuerpo de mensaje XML o establezca dichos elementos, deberá utilizar las constantes de tipo de campo correctas, en las referencias de campo ESQL, para direccionarlos.
En la tabla siguiente se listan las constantes de tipo de campo para todos los elementos válidos.
Elemento de sintaxis | Constante de tipo de campo |
---|---|
CDataSection | (XML.CDataSection) |
Comment | (XML.Comment) |
Content | (XML.Content) |
Element | (XML.Element) |
EntityReferenceEnd | (XML.EntityReferenceEnd) |
EntityReferenceStart | (XML.EntityReferenceStart) |
ProcessingInstruction | (XML.ProcessingInstruction) |
WhiteSpace | (XML.WhiteSpace) |
Cuando no existe un tipo en un elemento de vía de acceso, el tipo del elemento de sintaxis no es importante. Es decir, un elemento de vía de acceso de name coincide con cualquier elemento de sintaxis con el nombre de name, independientemente del tipo de elemento. Del mismo modo que un elemento de vía de acceso puede especificar un nombre y no un tipo, un elemento de vía de acceso puede especificar un tipo y no un nombre. Este tipo de elemento de vía de acceso coincide con cualquier elemento de sintaxis que tenga el tipo especificado, independientemente del nombre. Considere el ejemplo siguiente:
FIELDNAME(InputBody.(XML.Element)[1])
Este ejemplo devuelve el nombre del primer elemento en el cuerpo del mensaje. El ejemplo siguiente de XML genérico muestra cuándo es necesario utilizar tipos en las vías de acceso:
<tag1 attr1='abc'> <attr1>123<attr1> </tag1>
La vía de acceso InputBody.tag1.attr1 hace referencia al atributo denominado attr1, porque los atributos aparecen antes que los elementos anidados en un árbol de sintaxis generado por un analizador XML. Para hacer referencia al elemento denominado attr1, debe utilizar una vía de acceso:
InputBody.tag1.(XML.Element)attr1
Incluya siempre tipos en estos casos para ser explícito sobre el elemento de sintaxis al que se está refiriendo.
El ESQL siguiente:
SET OutputRoot.XML.Element1.(XML.Element)Attribute1 = '123';
es esencialmente escaso para la siguiente vía de acceso totalmente calificada:
SET OutputRoot.XML.(XML.Element)Element1.(XML.Element)Attribute1. (XML.Content) = '123';
Examine el XML siguiente:
<?xml version="1.0"?> <!DOCTYPE Order SYSTEM "Order.dtd"> <Order> <ItemNo>1</ItemNo> <Quantity>2</Quantity> </Order>
La vía de acceso InputBody.Order hace referencia al elemento de sintaxis (XML.DocTypeDecl), porque éste aparece antes que el Cuerpo XML en el árbol de sintaxis y tiene el mismo nombre. Para hacer referencia al elemento ItemNo necesita utilizar una vía de acceso InputBody.(XML.Element)Order.ItemNo. Por ejemplo, tomando como ejemplo el siguiente mensaje de entrada XML:
<doc><i1>100</i1></doc>
Para asignar 112233 a <i1>, utilice la siguiente expresión ESQL:
SET OutputRoot.XML.(XML.Element)doc.I1=112233;