C#标签化/缩进HTML

本文关键字:缩进 HTML 标签 | 更新日期: 2023-09-27 18:24:16

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

编辑:

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

要求:

  • 在打开和关闭标记前后添加新行
  • 缩进标记内的内容(制表符或4个空格)
  • 将一个长行(有N个单词)拆分为多个缩进的行
  • 不要更改输入,即使它不是有效的HTML。仅制表/缩进和拆分长行

到目前为止,我有:

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;
}

C#标签化/缩进HTML

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

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

上面的html显示的内容与您要将其转换为的html不同,在渲染的html中会有额外的空白:testingtest ing

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

只有在已经存在空白的情况下才应该插入换行符。

这可能有点冗长,但这是我脑海中唯一能想到的事情。

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

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