C# 制表符/缩进 HTML

发布于 2025-01-04 13:46:48 字数 916 浏览 2 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

┾廆蒐ゝ 2025-01-11 13:46:48

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

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

上面的 html 的显示效果与您想要将其转换为的 html 不同,渲染的 html 中会有额外的空格: testingtest ing

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

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

You might want to rethink your approach, inserting newlines (and indenting) can cause serious white-space problems.

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

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 vs test ing

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

You should only insert a newline if there is already whitespace present.

指尖微凉心微凉 2025-01-11 13:46:48

这可能有点啰嗦,但这是我唯一能想到的事情。

使用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文