2009-06-09 12 views
5

Sto cercando di creare un documento XML in C# con CDATA per contenere il testo all'interno di un elemento. Per esempio ..Codifica CDATA XML

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

Tuttavia, quando ricevo la proprietà InnerXml del documento, il CDATA è stato riformattato in modo che la stringa di InnerXml assomiglia al di sotto del quale non riesce.

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

Come è possibile mantenere il formato originale quando si accede alla stringa dell'XML?

Acclamazioni

+0

Si prega di mostrare come si sta costruendo il documento. Sospetto che tu stia semplicemente impostando il nodo di testo su "" che è il motivo per cui è stato scappato. –

+0

Infatti sto ... utilizzando la proprietà InnerText di XmlNode. Cosa dovrei usare? –

risposta

10

Non usare InnerText: utilizzare 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

Grazie Jon! Avevo lo stesso 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 nuova regola delle classi X *! XCData è anche abbastanza carino da spezzare le stringhe in più elementi CDATA che lo infrangono (l'unica sequenza riservata all'interno di uno: "]]>"). Ad esempio: 'nuovo XCData ("]]> blah ")' output ' blah]]>', con "]]" in un elemento CDATA e ">" in un altro . – patridge