C#Tabify / Indent HTML

时间:2012-02-10 16:06:26

标签: c# html regex indentation

C#中是否有工具/库/函数可以在不验证或整理输入的情况下对生成的HTML代码进行制表或缩进?

编辑:

缩进从JavaScript TextEditors生成的HTML代码,包括但不限于TinyMCE。没有HtmlTextWriter。不能指望有效的XML / XHTML / HTML代码。

要求:

  • 在打开和关闭代码之前和之后添加新行。
  • 缩进标签内的内容(标签或4个空格)。
  • 将一条长行(包含N个单词)拆分为多个缩进行。
  • 即使输入不是有效的HTML,也不要更改输入。只有tabify / indent和split long lines。

到目前为止,我有:

private string FormatHtml(string input)
{
    //Opening tags
    Regex r = new Regex("<([a-z]+) *[^/]*?>");
    string retVal = string.Empty;
    retVal = r.Replace(input, string.Format("$&{0}\t", Environment.NewLine));

    //Closing tags
    r = new Regex("</[^>]*>");
    retVal = r.Replace(retVal, string.Format("{0}$&{0}", Environment.NewLine));

    //Self closing tags
    r = new Regex("<[^>/]*/>");
    retVal = r.Replace(retVal, string.Format("$&{0}", Environment.NewLine));

    return retVal;
}

2 个答案:

答案 0 :(得分:3)

您可能想重新考虑您的方法,插入换行符(和缩进)可能会导致严重的空白问题。

<span style="color:red">test</span><span>ing</span>

上面的html与你要将其转换为的html显示不同,渲染的html中会有额外的空格:testing vs test ing

<span style="color:red">
    test
</span>
<span>
    ing
</span>

如果已经存在空格,则只应插入换行符。

答案 1 :(得分:2)

这可能是一个漫长的方式,但它是我能想到的唯一一件事。

使用sgml转换器将html转换为xml,即HtmlAgility或SgmlReader

然后您可以写出XmlTextWriter并在设置中指定要缩进的内容。