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;
}
您可能需要重新考虑您的方法,插入换行(和缩进)可能会导致严重的空白问题。
<span style="color:red">test</span><span>ing</span>
上面的html显示的内容与您要将其转换为的html不同,在渲染的html中会有额外的空白:testing
与test ing
<span style="color:red">
test
</span>
<span>
ing
</span>
只有在已经存在空白的情况下才应该插入换行符。
这可能有点冗长,但这是我脑海中唯一能想到的事情。
使用sgml转换器将html转换为xml,例如HtmlAgility或SgmlReader
然后,您可以向XmlTextWriter写出内容,并在设置中指定要缩进的内容。