【问题标题】:C# Tabify/Indent HTMLC# Tabify/缩进 HTML
【发布时间】:2012-03-03 02:24:12
【问题描述】:

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

编辑:

缩进从 JavaScript 文本编辑器生成的 HTML 代码,包括但不限于 TinyMCE。没有 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;
}

【问题讨论】:

  • 您能否提供输入样本和预期输出样本?
  • manoli.net/csharpformat 基于网络,但提供可以集成到另一个应用程序中的 C# 源代码。
  • 那根本不缩进代码。 :)
  • 如果输入的 HTML 也是有效的 XML,您可以使用带有适当 XmlWriterSettings 的 XmlWriter。

标签: c# html regex indentation


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    然后您可以写出到 XmlTextWriter 并在设置中指定您想要缩进。

    【讨论】:

    • 不对输入进行任何更改,如何只缩进html标签内的内容?
    • 在那种情况下,你看过 HTML Tidy,tidy.sourceforge.netmarkbeaton.com/… 有一个 .net 绑定可用
    • 引用的库“libtidy.dll”使 Windows Server 2008 R2 SP1 64 位崩溃。很不稳定。 :(
    • 不过,在查看上面的链接时,它也没有缩进代码。
    • Tidy html 的文档显示它可以缩进代码,tidy.sourceforge.net/docs/Overview.html 所以不确定那里发生了什么,至于崩溃,最可能的原因是源代码是针对任何源代码编译的我过去遇到过问题。将其设置为 x86 或 x64。
    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多