如何从XDocument获取Xml作为字符串?


Answers:


101

您只需要使用对象的重写ToString()方法:

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

这适用于所有XObject,例如XElement等。


23
这个方法到底是干什么的?o.0
Andrzej Gis

1
具有简单链接到XmlDocument.OuterXml属性只是为了简单演示。

4
现在返回System.Xml.XmlDocument
The Muffin Man'1

4
@TheMuffinMan那你就错做,因为这个答案是约的XDocument没有的XmlDocument(LINQ)
Mathijs塞赫尔斯

如果您的任何XML具有&或其他特殊字符,则将无法使用
Alex Gordon,

10

我不知道什么时候改变了,但是今天(2017年7月)尝试答案时,我得到了

“ System.Xml.XmlDocument”

代替ToString(),您可以使用最初预期的方式来访问XmlDocument内容:将xml文档写入流。

XmlDocument xml = ...;
string result;

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

7
当然,这很令人困惑,但是如果您使用的是Linq,则应该使用XDocument而不是XmlDocument。然后它应该工作:-)。
Mathijs Segers

4

使用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());

几乎不需要这种复杂性并一次又一次地复制。只需使用一StringWriter()Save()直接。
加博尔(Gábor)

2

使用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();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.