XMLDocumentをStringに変換する方法は次のとおりです。
StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);
xmlDoc.WriteTo(xmlTextWriter);
return stringWriter.ToString();
この方法の問題点は、"(属性内にある引用符)がある場合、それらがエスケープされることです。
例えば:
<Campaign name="ABC">
</Campaign>
上記は期待されるXMLです。しかしそれは戻る
<Campaign name=\"ABC\">
</Campaign>
String.Replace "\"ができますが、そのメソッドは問題ありませんか?副作用はありますか? XML自体に"\"が含まれていてもうまく動作しますか?
引用符はありません。それはただのVSデバッガです。コンソールに印刷するかファイルに保存してみてください。補足として:常に使い捨てのものを処分してください:
using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
xmlDoc.WriteTo(xmlTextWriter);
xmlTextWriter.Flush();
return stringWriter.GetStringBuilder().ToString();
}
XmlDocがXmlDocumentオブジェクトであると仮定した場合、xmlDoc.OuterXmlは正しくありません。
return xmlDoc.OuterXml;
OuterXmlプロパティ は、xmlの文字列バージョンを返します。
XmlDocument
のWindows.Data.Xml.Dom.XmlDocument
バージョン(たとえばUWPアプリで使用されている)を使用している場合は、yourXmlDocument.GetXml()
を使用してXMLを文字列として取得できます。
拡張方法として:
public static class Extensions
{
public static string AsString(this XmlDocument xmlDoc)
{
using (StringWriter sw = new StringWriter())
{
using (XmlTextWriter tx = new XmlTextWriter(sw))
{
xmlDoc.WriteTo(tx);
string strXmlText = sw.ToString();
return strXmlText;
}
}
}
}
今簡単に使用するには:
yourXmlDoc.AsString()
デバッガでは"
は\"
として表示されますが、データは文字列内で正しいため、何も置き換える必要はありません。文字列をファイルにダンプしようとすると、文字列が正しいことがわかります。