C#XMLElement.OuterXML在一行而不是格式

我正在尝试使用log4net从WCF服务记录一些XML响应。

我希望XML文件的输出到日志中的格式正确。 该请求作为XMLElement提供。

例:

请求如下:

  Information Application1 Timings 1000 2012-09-02T12:05:15.234Z Server1 10000000-0000-0000-0000-000000000000 Progam1 Entry User1  

然后,如果我将此值输出到log4net。

 logger.Info(request.OuterXml); 

我将整个文档记录在一行中,如下所示:

 InformationApplication1Timings10002012-09-02T12:05:15.234ZServer110000000-0000-0000-0000-000000000000Progam1EntryUser1 

我希望它在log.txt文件中显示格式正确,因为它进来。到目前为止,我发现这样做的唯一方法是将它转换为XElement,如下所示:

 XmlDocument logXML = new XmlDocument(); logXML.AppendChild(logXML.ImportNode(request, true)); XElement logMe = XElement.Parse(logXML.InnerXml); logger.Info(logMe.ToString()); 

这对我来说似乎不是一个好的编程。 我一直在搜索文档,我无法找到一种内置的方法来正确输出它而不转换它。

是否有一种明显的,更好的方式让我失踪?

edit1:删除了ToString(),因为OuterXML是一个String值。

edit2:我回答了我自己的问题:

所以我做了一些研究,我想我错过了文档中的一段代码。

http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.outerxml.aspx

我把它归结为:

 using (MemoryStream ms = new MemoryStream()) { XmlWriterSettings xws = new XmlWriterSettings(); xws.Indent = true; using (XmlWriter xmlWriter = XmlWriter.Create(ms, xws)) { request.WriteTo(xmlWriter); } ms.Position = 0; StreamReader sr = new StreamReader(ms); string s = sr.ReadToEnd(); // s will contain indented xml logger.Info(s); } 

尽管更冗长,但这比我现在的方法更有效率。

XElement解析是最干净的方式。 您可以使用以下方法保存一行或两行:

 logger.Info(XElement.Parse(request.OuterXml).ToString());