Ash*_*pta 66 .net c# xml string linq-to-xml
我是linq to XML的新手.在构建了XDocument之后,如何获得它的OuterXml,就像使用XmlDocument一样.
小智 89
您只需要使用对象的重写ToString()方法:
XDocument xmlDoc ...
string xml = xmlDoc.ToString();
Run Code Online (Sandbox Code Playgroud)
这适用于所有XObject,如XElement等.
Mik*_*oft 11
一些回复给出了稍微错误的答案。
XDocument.ToString()省略 XML 声明(并且,根据 @Alex Gordon 的说法,如果它包含编码的异常字符(如 ),则可能返回无效的 XML &)。XDocument到StringWriter将导致 .NET 发出encoding="utf-16",您很可能不希望出现这种情况(如果您将 XML 保存为字符串,可能是因为您想稍后将其保存为文件,而保存文件的事实上的标准是 UTF-8 - .NET 将文本文件保存为 UTF-8,除非另有指定)。使用以下内容:
var memory = new MemoryStream();
xDocument.Save(memory);
string xmlText = Encoding.UTF8.GetString(memory.ToArray());
Run Code Online (Sandbox Code Playgroud)
这将返回带有 UTF-8 声明的 XML 文本。
我不知道这什么时候改变了,但是今天(2017年7月)在尝试解答时,我得到了
"System.Xml.XmlDocument"
ToString()您可以使用最初访问XmlDocument内容的方式来代替,将xml doc写入流.
XmlDocument xml = ...;
string result;
using (StringWriter writer = new StringWriter())
{
xml.Save(writer);
result = writer.ToString();
}
Run Code Online (Sandbox Code Playgroud)
执行 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());
Run Code Online (Sandbox Code Playgroud)