2012-03-02 28 views
1

私はのvarchar columnのXMLデータをXDocumentlinq to sql XElementに読み込んでいます。XDocumentの使い方エスケープ文字を書く方法

XDocument.Saveメソッドを実行すると、XMLはファイルに書き込まれますが、エスケープ文字が含まれます。たとえば。 ">""&gt"などに変更されました。
これを防ぐ簡単な方法はありますか?

+0

XMLではないのですか? – kenny

+0

これはかなり不明ですが、確実にエスケープされます。明らかではないのは、なぜこれが問題であるか、またはエスケープ処理がずっと早く起きたことで、データがdbaseテーブルに挿入されたことです。 –

答えて

2

まず、それを防ぐ理由はないようです。 kennyのように、特殊文字がXMLでエンコードされていない限り、( '<'または '>'文字はそのパーサーのために多くのことを意味するため)パーサーは生成されたXMLを解析できません。第2に、パーサーがXMLをデコードすると(たとえば、XElement.Valueを呼び出すと)、すべての特殊文字が元のものに変換されます。最後に、元の文字列(XML解析以外の目的など)を保持する場合は、CDATAを使用できます。これは、Linq2XMLの場合はXCDataクラスで表されます。

EDIT:Robが指摘したように、間違っている可能性があります。既存のXMLを特別な文字を使わずにドキュメントに保存する場合は、次のコードを使用してください:

XDocument document = new XDocument(); 
var xmlFromDb = "<xml>content</xml>"; 
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlFromDb))) 
{ 
    using (var reader = XmlReader.Create(stream)) { 
      reader.MoveToContent(); 
      document.Add(XElement.ReadFrom(reader)); 
    } 
} 
+1

あなたはその点を見逃しているかもしれないと思います。ソースxmlはデータベースにありますが、ドキュメントに挿入されるとエスケープされます。 OPはこれを「コンテンツ」としてではなくxmlとして挿入したい –

+0

コメントありがとうございます。 –

+0

ありがとうuser375487、それは完璧に機能しました! –

関連する問題