如何将一个xml文档写入asp.net响应格式很好?

时间:2009-09-08 21:23:18

标签: c# asp.net xml

我在数据库字段中有xml文档。 xml文档在元素之间没有空格(没有换行符,没有缩进)。

我想将它们输出到浏览器,格式很好。我只想在那里添加一些缩进的换行。是否有一种简单的,最好是内置的方法来做到这一点?

我正在使用ASP.NET 3.5和C#。这就是我到目前为止所做的,它将文档全部输出到一行:

我大约99.9977%肯定我错误地使用了XmlWriter。我现在正在完成的工作可以通过直接写入响应来完成。但我至少在正确的轨道上吗? :)

int id = Convert.ToInt32(Request.QueryString["id"]);
var auditLog = webController.DB.Manager.AuditLog.GetByKey(id);

var xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Indent = true;
xmlWriterSettings.OmitXmlDeclaration = true;

var xmlWriter = XmlWriter.Create(Response.OutputStream, xmlWriterSettings);
if (xmlWriter != null)
{
    Response.Write("<pre>");
    // ObjectChanges is a string property that contains an XML document
    xmlWriter.WriteRaw(Server.HtmlEncode(auditLog.ObjectChanges));
    xmlWriter.Flush();
    Response.Write("</pre>");
}

这是基于dtb答案的工作代码:

int id = Convert.ToInt32(Request.QueryString["id"]);
var auditLog = webController.DB.Manager.AuditLog.GetByKey(id);

var xml = XDocument.Parse(auditLog.ObjectChanges, LoadOptions.None);
Response.Write("<pre>" + Server.HtmlEncode(xml.ToString(SaveOptions.None)) + "</pre>");

感谢您帮助我!

2 个答案:

答案 0 :(得分:4)

WriteRaw只是将输入不变地写入基础流。

如果要使用内置格式,首先需要解析XML,然后将其转换回字符串。

最简单的解决方案可能是使用XLinq:

var xml = XDocument.Parse(auditLog.ObjectChanges);

Response.Write(Server.HtmlEncode(xml.ToString(SaveOptions.None)));

(这假设auditLog.ObjectChanges是一个表示格式良好的XML的字符串。)

如果您需要更多地控制格式(缩进,换行符),请将XDocument保存到支持MemoryStream的XmlWriter,将MemoryStream解码回字符串,然后编写字符串HtmlEncoded。

答案 1 :(得分:0)

如果auditLog.ObjectChanges是需要格式化的XML内容,那么您将以未格式化的方式存储它。要对其进行格式化,请将其视为XML并将其写入XMLWriter以对其进行格式化。然后使用HTML编码将格式化的XML包含在响应中。