web-dev-qa-db-ja.com

XmlDocumentを文字列に変換する

XMLDocumentStringに変換する方法は次のとおりです。

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自体に"\"が含まれていてもうまく動作しますか?

194
akif

引用符はありません。それはただのVSデバッガです。コンソールに印刷するかファイルに保存してみてください。補足として:常に使い捨てのものを処分してください:

using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
    xmlDoc.WriteTo(xmlTextWriter);
    xmlTextWriter.Flush();
    return stringWriter.GetStringBuilder().ToString();
}
164
Darin Dimitrov

XmlDocがXmlDocumentオブジェクトであると仮定した場合、xmlDoc.OuterXmlは正しくありません。

return xmlDoc.OuterXml;

OuterXmlプロパティ は、xmlの文字列バージョンを返します。

604
Chris Moutray

XmlDocumentWindows.Data.Xml.Dom.XmlDocumentバージョン(たとえばUWPアプリで使用されている)を使用している場合は、yourXmlDocument.GetXml()を使用してXMLを文字列として取得できます。

9
Whyser

拡張方法として:

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()
5
SixOThree

デバッガでは"\"として表示されますが、データは文字列内で正しいため、何も置き換える必要はありません。文字列をファイルにダンプしようとすると、文字列が正しいことがわかります。

2
Arsen Mkrtchyan