2012-01-25 18 views
9

Al usar el paquete OmniXML, ¿es posible almacenar código XML dentro de otro archivo XML que tenga sus propios datos XML?almacenar xml dentro de xml

De esta manera:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<root> 
<data> 
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
     <otherxml>data</otherxml> 
</data> 

en cuyo interior los datos de la etiqueta, todo debe ser datos. ¿Hay un char de escape que impida que el analizador analice los siguientes datos en la estructura de datos XML?

¿O OmniXML viene con soporte para serialización para esta situación?

Cualquier otra idea simple también es bienvenida.

+0

¿Lo intentó? o simplemente preguntando si se puede hacer? – RBA

+0

intenté eso, y obtuve el error de análisis – none

Respuesta

21

Puede utilizar CDATA:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<root> 
<data> 
    <![CDATA[ 
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
     <otherxml>data</otherxml> 
    ]]> 
</data> 

Nota cuando se obtiene el valor de data, será como una cadena de modo que tendría que ejecutar a través de un nuevo analizador XML.

Aquí hay un código de ejemplo para omniXML:

var 
    xml:IXMLDocument; 
    Node:IXMLNode; 
begin 
    xml := CreateXMLDoc;  
    xml.SelectSingleNode('/root/data',Node); 
    ShowMessage(GetNodeCData(Node,'data','')); 
end; 
+6

+1, mejor decir _debe usar CDATA_;) – TLama

+0

No es necesario ejecutarlo, debe escribirse para crear un archivo xml. – none

+1

Tenga en cuenta que puede haber problemas de codificación. Por ejemplo, si el xml incrustado usa , Y el xml externo usa UTF-8, un analizador XML aún debe procesar el xml interno como UTF-8. – mjn

3

si el contenido de los datos no tiene que ser leído rigth de distancia se puede codificar en base 64, por ejemplo, o UUEncode.

Luego puede extraer, decodificar y analizar los datos

+3

Esa es definitivamente la forma más difícil (y más lenta) de hacerlo, ya que aún tiene que almacenar el texto codificado en una sección 'CDATA'. –

+3

Si su XML incrustado también puede contener CDATA, entonces creo que debe codificarlo. Yo diría que esta es la forma preferida debido a esa razón. –

+0

@DarianMiller parece ser perfecto. –