O analisador XMLNSC é um analisador compacto; portanto, um elemento com conteúdo único é analisado como um elemento de sintaxe única. Quando um elemento possui tanto elementos filhos como algum texto, o texto é chamado de conteúdo combinado.
<simpleElement>simpleValue</simpleElement>
SET val = FIELDVALUE(InputRoot.XMLNSC.(XMLNSC.Field)simpleElement);
Para gerar um elemento com conteúdo simples na saída: SET OutputRoot.XMLNSC.(PCDataField)simpleElement VALUE = 'simpleValue';
Observe que XMLNSC.Field é utilizado ao consultar a árvore de mensagens, mas XMLNSC.PCDataField
é especificado ao construir a mensagem de saída. XMLNSC.PCDataField
pode ser usado para consultar a árvore de mensagens; entretanto, isso não funcionará
se a mensagem de entrada usou uma seção CData, conforme mostrado no exemplo a
seguir: <simpleElement><![CDATA[simpleValue]]></simpleElement>
<element>mixed1<child>simpleValue</child>mixed2</element>
Por padrão, o conteúdo misto é descartado, pois é geralmente somente formatação de espaço em branco e não tem nenhum significado comercial. O conteúdo combinado pode ser preservado se você selecionar a
caixa de opção Manter Conteúdo Combinado na página Opções do Analisador
das propriedades do nó.Se o conteúdo misto estiver sendo preservado, o analisador XMLNSC cria um elemento filho Value para cada item distinto do conteúdo misto.
SET mixed1 = FIELDVALUE(InputRoot.XMLNSC.(element).*[1];
O
ESQL para construir o fragmento XML acima é:
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';
O ESQL a seguir ativa a opção Reter Conteúdo Misto:
DECLARE X BLOB;
-- assume that X contains an XML document
CREATE LASTCHILD OF OutputRoot
PARSE(X OPTIONS XMLNSC.MixedContentRetainAll);
Uma seção CData é uma notação XML que permite que caracteres de marcação XML sejam incluídos no conteúdo de um elemento.
<simpleElement>simpleValue</simpleElement>
<simpleElement><![CDATA[simpleValue]]></simpleElement>
Se a seção CData for o único conteúdo de texto, o analisador XMLNSC lembra-se de que o documento de entrada continha uma seção CData, configurando o tipo de campo para XMLNSC.CDataField em vez de XMLNSC.PCDataField. Se a seção CData for o único conteúdo de texto, ela é criada como um elemento de valor filho, com outros elementos de valor filho representando o conteúdo de texto remanescente. A seguir há um exemplo disto:
<simpleElement><![CDATA[CDataValue]]>normalText</simpleElement>
Consulte XMLNSC: Trabalhando com CData para obter informações adicionais sobre o uso correto de CData em documentos XML.