有没有一种快速的方法来格式化XmlDocument以便在C#中显示?

时间:2009-04-21 08:41:34

标签: c# asp.net xml

我想输出我的InnerXml属性以便在网页中显示。我想看看各种标签的缩进。有一个简单的方法吗?

6 个答案:

答案 0 :(得分:18)

这是我前一段时间拼凑起来的一个小课程。

它假定您使用字符串格式的XML。

public static class FormatXML
{
    public static string FormatXMLString(string sUnformattedXML)
    {
        XmlDocument xd = new XmlDocument();
        xd.LoadXml(sUnformattedXML);
        StringBuilder sb = new StringBuilder();
        StringWriter sw = new StringWriter(sb);
        XmlTextWriter xtw = null;
        try
        {
            xtw = new XmlTextWriter(sw);
            xtw.Formatting = Formatting.Indented;
            xd.WriteTo(xtw);
        }
        finally
        {
            if(xtw!=null)
                xtw.Close();
        }
        return sb.ToString();
    }
}

答案 1 :(得分:1)

您应该可以使用代码格式化程序执行此操作。你必须首先将xml编码到页面中。

Google拥有a nice prettifyer能够可视化XML以及多种编程语言。

基本上,将您的XML放入这样的预标签中:

<pre class="prettyprint"> 
    &lt;link href="prettify.css" type="text/css" rel="stylesheet" /&gt;
    &lt;script type="text/javascript" src="prettify.js">&lt;/script&gt;
</pre>

答案 2 :(得分:0)

使用XML Web Server Control在网页上显示xml文档的内容。

编辑:您应该将整个XmlDocument传递给XML Web服务器控件的Document属性以显示它。您不需要使用InnerXml属性。

答案 3 :(得分:0)

如果identation是您唯一的cocern,并且您能负担得起启动xternall进程,则可以使用HTML Tidy控制台工具(~100K)处理xml文件。

代码是:

tidy --input-xml y --output-xhtml y --indent "1" $(FilePath)

然后,一旦摆脱了特殊的字符,就可以在网页上显示标题字符串。

创建递归函数也很容易做出这样的输出 - 简单地从根开始迭代节点并进入子节点的下一个递归步骤,将identation作为参数传递给每个新的递归调用。

答案 4 :(得分:0)

查看ASP.NET的免费Actipro CodeHighlighter - 它可以整齐地显示XML和其他格式。

或者您对实际格式化XML更感兴趣?然后看一下XmlTextWriter - 你可以指定格式(缩进与否)和缩进级别之类的东西,然后将你的XML写出来,例如:一个MemoryStream,然后从那里读回一个字符串进行显示。

马克

答案 5 :(得分:0)

在设置XmlWriterSettings时使用XmlTextWriter,以便启用缩进。如果要将结果字符串写入屏幕,可以将StringWriter用作“临时存储”。