私はのvarchar column
のXMLデータをXDocument
のlinq to sql XElement
に読み込んでいます。XDocumentの使い方エスケープ文字を書く方法
XDocument.Save
メソッドを実行すると、XMLはファイルに書き込まれますが、エスケープ文字が含まれます。たとえば。 ">"
が">"
などに変更されました。
これを防ぐ簡単な方法はありますか?
私はのvarchar column
のXMLデータをXDocument
のlinq to sql XElement
に読み込んでいます。XDocumentの使い方エスケープ文字を書く方法
XDocument.Save
メソッドを実行すると、XMLはファイルに書き込まれますが、エスケープ文字が含まれます。たとえば。 ">"
が">"
などに変更されました。
これを防ぐ簡単な方法はありますか?
まず、それを防ぐ理由はないようです。 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));
}
}
あなたはその点を見逃しているかもしれないと思います。ソースxmlはデータベースにありますが、ドキュメントに挿入されるとエスケープされます。 OPはこれを「コンテンツ」としてではなくxmlとして挿入したい –
コメントありがとうございます。 –
ありがとうuser375487、それは完璧に機能しました! –
XMLではないのですか? – kenny
これはかなり不明ですが、確実にエスケープされます。明らかではないのは、なぜこれが問題であるか、またはエスケープ処理がずっと早く起きたことで、データがdbaseテーブルに挿入されたことです。 –