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

时间:2010-12-26 11:07:31

标签: c# .net xml string linq-to-xml

我是LINQ to XML的新手。构建XDocument后,如何获得OuterXml XmlDocument,就像使用{{1}}一样?

5 个答案:

答案 0 :(得分:84)

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

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

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

答案 1 :(得分:9)

我不知道这种情况何时发生了变化,但今天(2017年7月)在尝试解答时,我得到了

  

“System.Xml.XmlDocument”

您可以使用最初预期的方式访问{ "name": "dwvgapi", "short_name": "dwvgapi", "description": "Google API test for dwv. Used for testing purposes only.", "version": "0.1.0.2", "manifest_version": 2, "app": { "urls": [ "https://ivmartel.github.io/dwvgapi/demo/" ], "launch": { "web_url": "https://ivmartel.github.io/dwvgapi/demo/index.html" } }, "icons": { "50": "resources/icons/dwvgapi-50.png", "128": "resources/icons/dwvgapi-128.png" }, "offline_enabled": true, "container": "GOOGLE_DRIVE", "api_console_project_id": "575535891659", "gdrive_mime_types": { "http://drive.google.com/intents/opendrivedoc": [ { "type": ["application/dicom", "application/vnd.google.drive.ext-type.dcm"], "href": "https://ivmartel.github.io/dwvgapi/demo/index.html", "title": "Open", "disposition": "window" } ] } } 内容而不是ToString():将xml doc写入流。

XmlDocument

答案 2 :(得分:3)

使用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 :(得分:0)

执行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());

答案 4 :(得分:0)

几个回答给出了一个稍微不正确的答案。

  • XDocument.ToString() 省略了 XML 声明(并且,根据@Alex Gordon 的说法,如果 XML 包含编码的异常字符,例如 &amp;,则可能会返回无效的 XML)。
  • XDocument 保存到 StringWriter 将导致 .NET 发出 encoding="utf-16",这是您很可能不想要的(如果您将 XML 保存为字符串,这可能是因为您想要稍后将其保存为文件,事实上保存文件的标准是 UTF-8 - .NET 将文本文件保存为 UTF-8,除非另有说明)。
  • @Wolfgang Grinfeld 的回答正朝着正确的方向发展,但它过于复杂。

使用以下内容:

  var memory = new MemoryStream();
  xDocument.Save(memory);
  string xmlText = Encoding.UTF8.GetString(memory.ToArray());

这将返回带有 UTF-8 声明的 XML 文本。