C# 制表符/缩进 HTML
C# 中是否有工具/库/函数可以在不验证或整理输入的情况下对生成的 html 代码进行制表符或缩进?
编辑:
缩进从 JavaScript 文本编辑器(包括但不限于 TinyMCE)生成的 HTML 代码。没有 HtmlTextWriter。不能期望有效的 XML/XHTML/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;
}
Is there a tool/library/function in C# which tabifies or indents generated html code without validating or tidying the input?
Edit:
Indent generated HTML code from JavaScript TextEditors, including but not limited to TinyMCE. No HtmlTextWriter. Must not expect a valid XML/XHTML/HTML code.
Requirement:
- Add a new line before and after opening and closing tags.
- Indent content inside tags (Tab or 4 Spaces).
- Split a long line (having N number of words) into multiple indented lines.
- Do not change the input even though it is not a valid HTML. Only tabify/indent and split long lines.
Upto this point, I have:
private string FormatHtml(string input)
{
//Opening tags
Regex r = new Regex("<([a-z]+) *[^/]*?>");
string retVal = string.Empty;
retVal = r.Replace(input, string.Format("amp;{0}\t", Environment.NewLine));
//Closing tags
r = new Regex("</[^>]*>");
retVal = r.Replace(retVal, string.Format("{0}amp;{0}", Environment.NewLine));
//Self closing tags
r = new Regex("<[^>/]*/>");
retVal = r.Replace(retVal, string.Format("amp;{0}", Environment.NewLine));
return retVal;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可能需要重新考虑您的方法,插入换行符(和缩进)可能会导致严重的空白问题。
上面的 html 的显示效果与您想要将其转换为的 html 不同,渲染的 html 中会有额外的空格:
testing
与test ing
您应该只插入如果已经存在空格则换行。
You might want to rethink your approach, inserting newlines (and indenting) can cause serious white-space problems.
The html above does not display the same as the html you want to convert it to, there will be extra whitespace in the rendered html:
testing
vstest ing
You should only insert a newline if there is already whitespace present.
这可能有点啰嗦,但这是我唯一能想到的事情。
使用 sgml 转换器将 html 转换为 xml,即 HtmlAgility 或 SgmlReader
然后您可以写入 XmlTextWriter 并在设置中指定您想要缩进。
This may be a bit of a long winded way of doing it but its the only thing I can think of off the top of my head.
Use an sgml converter to convert the html to xml ie HtmlAgility or SgmlReader
You could then write out to an XmlTextWriter and specify in the settings that you want indents.