web-dev-qa-db-ja.com

XDocumentからXmlを文字列として取得する方法は?

LINQ to XMLは初めてです。 XDocumentをビルドした後、OuterXmlで行ったようにXmlDocumentを取得するにはどうすればよいですか?

63
Ashish Gupta

オブジェクトのオーバーライドされたToString()メソッドのみを使用する必要があります。

XDocument xmlDoc ...
string xml = xmlDoc.ToString();

これは、XElementなどのすべてのXObjectで機能します。

86
user432219

これがいつ変わったかはわかりませんが、今日(2017年7月)答えを試してみると、

「System.Xml.XmlDocument」

ToString()の代わりに、元々意図されていたXmlDocumentコンテンツにアクセスする方法を使用できます:xmlドキュメントをストリームに書き込む。

XmlDocument xml = ...;
string result;

using (StringWriter writer = new StringWriter())
{
  xml.Save(writer);
  result = writer.ToString();
}
9
Mafii

ToString()を使用して、XDocumentを文字列に変換します。

string result = string.Empty;
XElement root = new XElement("xml",
    new XElement("MsgType", "<![CDATA[" + "text" + "]]>"),
    new XElement("Content", "<![CDATA[" + "Hi, this is Wilson Wu Testing for you! You can ask any question but no answer can be replied...." + "]]>"),
    new XElement("FuncFlag", 0)
);
result = root.ToString();
3
Wilson Wu

XDocument.ToString()を実行しても、完全なXMLを取得できない場合があります。

XMLドキュメントの先頭のXML宣言を文字列として取得するには、XDocument.Save()メソッドを使用します。

    var ms = new MemoryStream();
    using (var xw = XmlWriter.Create(new StreamWriter(ms, Encoding.GetEncoding("ISO-8859-1"))))
        new XDocument(new XElement("Root", new XElement("Leaf", "data"))).Save(xw);
    var myXml = Encoding.GetEncoding("ISO-8859-1").GetString(ms.ToArray());
0