El analizador XMLNSC es un analizador compacto; por lo tanto, un elemento con contenido simple se analiza como un elemento de sintaxis simple. Cuando un elemento tiene elemento hijo y algo de texto, el texto se denomina contenido mixto.
<simpleElement>simpleValue</simpleElement>
SET val = FIELDVALUE(InputRoot.XMLNSC.(XMLNSC.Field)simpleElement);
Para generar un elemento con contenido simple en la salida: SET OutputRoot.XMLNSC.(PCDataField)simpleElement VALUE = 'simpleValue';
Observe que se utiliza XMLNSC.Field al consultar el árbol de mensaje, pero
se especifica XMLNSC.PCDataField al crear el mensaje de salida. Se puede
utilizar XMLNSC.PCDataField para consultar el árbol de mensaje; sin embargo,
esto no podría funcionar si el mensaje de entrada ha utilizado una sección
CData, tal como se muestra en el siguiente ejemplo: <simpleElement><![CDATA[simpleValue]]></simpleElement>
<element>mixed1<child>simpleValue</child>mixed2</element>
De forma predeterminada, el contenido mixto se descarta porque normalmente es espacio en blanco de formato y no tiene ningún significado comercial. El contenido mixto se puede conservar si selecciona el recuadro Retener el
contenido mixto en la página Opciones de análisis de las propiedades del nodo.Si se conserva el contenido mixto, el analizador XMLNSC crea un elemento hijo Value para cada elemento diferenciado del contenido mixto.
SET mixed1 = FIELDVALUE(InputRoot.XMLNSC.(element).*[1];
El código ESQL para construir el fragmento XML anterior es: CREATE ref REFERENCE TO OutputRoot.XMLNSC.element;
CREATE FIRSTCHILD OF ref TYPE XMLNSC.PCDataValue VALUE 'mixed1';
CREATE LASTCHILD OF ref NAME 'child' TYPE XMLNSC.PCDataField VALUE 'simpleValue';
CREATE LASTSTCHILD OF ref TYPE XMLNSC.PCDataValue VALUE 'mixed2';
El siguiente código ESQL habilita la opción Retener el contenido mixto:
DECLARE X BLOB;
-- presupongamos que X contiene un documento XML
CREATE LASTCHILD OF OutputRoot
PARSE(X OPTIONS XMLNSC.MixedContentRetainAll);
Una sección CData es una notación XML que permite que los caracteres de marcación XML se incluyan en el contenido de un elemento.
<simpleElement>simpleValue</simpleElement>
<simpleElement><![CDATA[simpleValue]]></simpleElement>
Si la sección CData es el único contenido de texto, el analizador XMLNSC recuerda que el documento de entrada incluía una sección CData estableciendo el tipo de campo en XMLNSC.CDataField en lugar de hacerlo en XMLNSC.PCDataField. Si la sección CData no es el único contenido de texto, se crea como un elemento de valor hijo, con otros elementos de valor hijo que representan el contenido de texto restante. Esto se muestra en el ejemplo siguiente:
<simpleElement><![CDATA[CDataValue]]>normalText</simpleElement>
Consulte XMLNSC: Cómo trabajar con CData para obtener más información sobre el uso correcto de CData en los documentos XML.