我在数据库字段中有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>");
感谢您帮助我!
答案 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包含在响应中。