2009-06-09 10 views
5

Ich versuche, ein XML-Dokument in C# mit CDATA zu erstellen, um den Text in einem Element zu halten. Zum Beispiel ..XML CDATA Codierung

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

Allerdings, wenn ich die InnerXml Eigenschaft des Dokuments zu erhalten, hat die CDATA umformatiert so sehen die InnerXml Zeichenfolge wie die unter dem fehlschlägt.

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

Wie kann ich das ursprüngliche Format beibehalten, wenn ich auf die Zeichenfolge des XML zugreife? XmlDocument.CreateCDataSection verwenden:

Prost

+0

Bitte zeigen Sie, wie Sie das Dokument erstellen. Ich vermute, dass Sie den Textknoten nur auf "" setzen, weshalb er geflutet wird. –

+0

Tatsächlich verwende ich die InnerText-Eigenschaft des XmlNode. Was soll ich verwenden? –

Antwort

10

Sie InnerText nicht verwenden

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

Danke Jon! Ich hatte das gleiche Problem. – Hallaghan

6

Mit XmlDocument erstellen:

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

oder XElement:

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

Die neue X * Klassenregel! XCData ist sogar nett genug, um Strings in mehrere CDATA-Elemente aufzuteilen, die es zerstören würden (die einzige reservierte Sequenz in einem: "]]>"). Zum Beispiel: 'new XCData ("]]> blah ")' gibt ' blah]]>' mit "]]" in einem CDATA-Element und das ">" in einem anderen aus . – patridge