2009-06-09 18 views
5

私は要素の中にテキストを保持するためにCDATAでC#でXML文書を構築しようとしています。私は、文書のInnerXmlプロパティプロパティを取得するときInnerXmlプロパティ文字列がその下には失敗したように見えるので、例えば.. XML CDATAエンコーディング

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

はしかし、CDATAは、再フォーマットされています。

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

XMLの文字列にアクセスするとき、元の形式を保持するにはどうすればよいですか?

乾杯

+0

ドキュメントの作成方法を示してください。テキストノードを "<![CDATA [[email protected]]]>に設定するだけだと思う​​ので、それがエスケープされています。 –

+0

実際、私は... XmlNodeのInnerTextプロパティを使用しています。 どうすればよいですか? –

答えて

10

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("[email protected]"); 

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

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

ありがとうJon!私は同じ問題を抱えていた。 – Hallaghan

1

XmlDocumentを持つXML文書

6

にCDATAノードを作成する方法についての情報と例についてはXmlDocument::CreateCDataSection Methodを参照してください。

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

またはXElement

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

新しいX *クラスルール! XCDataは、文字列を分割する複数のCDATA要素(1つの中で唯一の予約されたシーケンス: "]]>")を分割するのに十分なほど素晴らしいものです。 "<![CDATA []]]> blah]]>'、 "]]"を1つのCDATA要素に、 ">"を別のCDATA要素に出力します(例: 'new XCData(")]> blah " 。 – patridge