2009-06-09 58 views
5

Estoy intentando crear un documento XML en C# con CDATA para mantener el texto dentro de un elemento. Por ejemplo ..XML CDATA Encoding

<email> 
<![CDATA[[email protected]]]> 
</email> 

Sin embargo, cuando llegue a la propiedad InnerXml del documento, el CDATA se ha reformateado lo que la cadena InnerXml se parece a la de abajo la que falla.

<email> 
&lt;![CDATA[[email protected]]]&gt; 
</email> 

¿Cómo puedo conservar el formato original cuando accedo a la cadena del XML?

Saludos

+0

Por favor, muestre cómo está compilando el documento. Sospecho que solo estás configurando el nodo de texto en "" y por eso se está escapando. –

+0

De hecho, estoy ... usando la propiedad InnerText del XmlNode. ¿Qué debo usar? –

Respuesta

10

No utilizar InnerText: utilizar XmlDocument.CreateCDataSection:

using System; 
using System.Xml; 

public class Test 
{ 
    static void Main() 
    { 
     XmlDocument doc = new XmlDocument(); 
     XmlElement root = doc.CreateElement("root"); 
     XmlElement email = doc.CreateElement("email"); 
     XmlNode cdata = doc.CreateCDataSection("[email protected]"); 

     doc.AppendChild(root); 
     root.AppendChild(email); 
     email.AppendChild(cdata); 

     Console.WriteLine(doc.InnerXml); 
    } 
} 
+0

¡Gracias Jon! Estaba teniendo el mismo problema. – Hallaghan

6

Con XmlDocument:

XmlDocument doc = new XmlDocument(); 
    XmlElement email = (XmlElement)doc.AppendChild(doc.CreateElement("email")); 
    email.AppendChild(doc.CreateCDataSection("[email protected]")); 
    string xml = doc.OuterXml; 

o con XElement:

XElement email = new XElement("email", new XCData("[email protected]")); 
    string xml = email.ToString(); 
+1

¡La nueva regla de las clases X *! XCData es incluso lo suficientemente bueno como para dividir cadenas en múltiples elementos CDATA que lo romperían (la única secuencia reservada dentro de uno: "]]>"). Por ejemplo: 'new XCData ("]]> blah ")' salidas ' blah]]>', con "]]" en un elemento CDATA y el ">" en otro . – patridge