Кодировка XML CDATA - PullRequest
7 голосов
/ 09 июня 2009

Я пытаюсь построить документ XML на C # с CDATA, чтобы держать текст внутри элемента. Например ..

<email>
<![CDATA[test@test.com]]>
</email>

Однако, когда я получил свойство InnerXml документа, CDATA был переформатирован, поэтому строка InnerXml выглядит примерно так, как показано ниже.

<email>
&lt;![CDATA[test@test.com]]&gt;
</email>

Как сохранить исходный формат при доступе к строке XML?

Приветствия

Ответы [ 3 ]

11 голосов
/ 09 июня 2009

Не использовать InnerText: использовать 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("test@test.com");

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

        Console.WriteLine(doc.InnerXml);
    }
}
8 голосов
/ 09 июня 2009

С XmlDocument:

    XmlDocument doc = new XmlDocument();
    XmlElement email = (XmlElement)doc.AppendChild(doc.CreateElement("email"));
    email.AppendChild(doc.CreateCDataSection("test@test.com"));
    string xml = doc.OuterXml;

или с XElement:

    XElement email = new XElement("email", new XCData("test@test.com"));
    string xml = email.ToString();
1 голос
/ 09 июня 2009

См. XmlDocument :: CreateCDataSection Method для получения информации и примеров, как создавать узлы CDATA в XML-документе

...