【问题标题】:C# version of HTML Tidy?C# 版本的 HTML Tidy?
【发布时间】:2011-04-29 11:26:12
【问题描述】:

我只是在寻找一种非常简单的方法来清理一些 HTML(可能使用嵌入式 JavaScript 代码)。我试过twodifferentHTML Tidy.NET 端口,两者都抛出异常......

抱歉,“干净”是指“缩进”。 HTML 完全没有格式错误。这是XHTML严格。


终于得到了使用SGML的东西,但这确实是缩进某些HTML的最荒谬的代码块。

private static string FormatHtml(string input)
{
    var sgml = new SgmlReader {DocType = "HTML", InputStream = new StringReader(input)};
    using (var sw = new StringWriter())
    using (var xw = new XmlTextWriter(sw) { Indentation = 2, Formatting = Formatting.Indented })
    {
        sgml.Read();
        while (!sgml.EOF)
            xw.WriteNode(sgml, true);
    }
    return sw.ToString();
}

【问题讨论】:

  • 所以你只是想重新格式化你的源代码?你可以使用任何 web-ide 或 Notepad++。
  • @Nick:我意识到这一点,但我尝试重新格式化我已经拥有的 HTML 文件.. 我正在尝试重新格式化我正在生成的 HTML C# 应用程序...
  • 检查 HtmlTextWriter,我更新了答案
  • 只是为了自我推销,my version 从 2007 年回到代码项目。仍在商业项目中使用它。

标签: c# .net html htmltidy


【解决方案1】:

Beautifier 提供 html 我用的是 html-beautify。 例如

const beautified = html_beautify("<div><p></p></div>");
console.log(beautified)
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/js-beautify/1.14.0/beautify-html.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 欢迎来到 Stackoverflow。这个问题是关于 C# 的。您的回答似乎建议使用 JS 库。请保持你的答案在主题上。
【解决方案2】:

您可以使用 HtmlAgilityPack(从 nuget 添加此包)。

代码示例:

string html = "<div><p>line 1<br>line 2</p><span></div>";
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(description);
var fixedHtml = htmlDoc.DocumentNode.OuterHtml;

输出:

<div><p>line 1<br />line 2</p><span></span></div>

【讨论】:

    【解决方案3】:

    AngleSharp 100% c#

        var parser = new HtmlParser();
    
        var document = parser.Parse("<html><head></head><body><i></i></body></html>");
    
        var sw = new StringWriter();
        document.ToHtml(sw, new PrettyMarkupFormatter());
    
        var HTML_prettified = sw.ToString());
    

    【讨论】:

    • 看起来是一个很棒的项目,但它并没有清理 HTML。如果他们提供一些选项来实际清理 html,或者更好地转换为 XHTML,那就太好了,但它似乎并不针对这些场景。
    • 这应该是公认的答案。它是 100% 的 C#,并在 5 行代码中完成了 OP 的要求。
    【解决方案4】:

    HTML Tidy 的最新 C# 包装器由 Mark Beaton 完成,它似乎比您引用的链接 (2003) 更新得多。另外值得注意的是,Mark 也提供了可执行文件供参考,而不是从官方网站上提取它们。这应该可以很好地组织和验证您的HTML

    【讨论】:

    • 构建仅用于 tidylib,而不是 C# 包装器。您还需要从源代码构建 TidyManaged。我正在运行一台 64 位机器,但无论出于何种原因,只有 32 位 tidylib dll 可以工作。我不得不把它放在 c:/windows/system.此外,Beaton 提供的示例不会缩进您的 HTML——这是我唯一想要的——你需要添加 doc.IndentBlockElements = AutoBool.Auto... 有点棘手。
    • 同意,我在迁移到 x64 后变得相当不稳定,并且 tidylib 抛出异常“BadImageFormatException 发生 - 尝试加载格式不正确的程序。(来自 HRESULT 的异常: 0x8007000B)”。在 TidyManaged github.com/markbeaton/TidyManaged/issues/3 上发布了一个错误
    • 通过在配置管理器中将 TidyManaged 项目和引用它的项目中的项目更改为 x86 并使用 32 位版本的 libtidy,我已设法使其在 Windows 7 64 位上运行。 dll。
    • 我刚刚在 64 位 Windows 7 下尝试了我的 64 位 libtidy.dll 构建,只要 TidyManaged 包装器代码是使用“任何 CPU”构建的,并且您的引用项目也是“任何 CPU”,一切正常。如果在 ASP.NET 下运行,您需要确保您的应用程序池也在 64 位模式下运行(“启用 32 位应用程序”应该为 false)。此外,您不需要将 libtidy.dll 放入系统目录 - 只需将其放入应用程序的 bin 文件夹就足够了。
    • 另外,我刚刚将 TidyManaged .NET 包装器库的“任何 CPU”版本上传到 GitHub:github.com/markbeaton/TidyManaged/downloads
    【解决方案5】:

    更新

    检查HtmlTextWriterXhtmlTextWriter,用法:Formatting Html Output with HtmlTextWriter,也许HTML construction via HtmlTextWriter会更好?

    同时检查:LINQ & Lambda, Part 3: Html Agility Pack to LINQ to XML Converter

    http://www.manoli.net/csharpformat/,这里是source code,以防你错过。


    也许你想自己做?这个项目可能会有所帮助:Html Agility Pack

    什么是 Html Agility Pack (HAP)?

    这是一个敏捷的 HTML 解析器,它构建一个读/写 DOM 并支持普通的 XPATH 或 XSLT(实际上你不必了解 XPATH 或 XSLT 就可以使用它,不用担心......)。它是一个 .NET 代码库,允许您解析“网络之外”的 HTML 文件。解析器对“真实世界”格式错误的 HTML 非常宽容。对象模型与 System.Xml 的提议非常相似,但用于 HTML 文档(或流)。

    Html Agility Pack 现在支持 Linq to Objects(通过 LINQ to Xml Like 接口)。查看新的测试版以使用此功能

    示例应用程序:

    • 页面修复或生成。你可以 以您想要的方式修复页面,修改 DOM,添加节点,复制节点, 嗯......你的名字。

    • 网络扫描仪。 您可以轻松访问 img/src 或 带有一堆 XPATH 查询的 a/hrefs。

    • 网络爬虫。您可以轻松报废 任何现有网页到 RSS 例如,只有一个 XSLT 文件作为绑定。一个 提供了这方面的示例。


    你也可以试试这个实现:A managed wrapper for the HTML Tidy library

    【讨论】:

    • 我听说过并且过去经常使用 HtmlAgilityPack..但是它可以整理 HTML 吗?
    • HAP 不是 Tidy 的替代品,它可以为你构建 DOM,你可以相应地处理它。此外,我不确定解析格式错误的 HTML 是否足够聪明(如果您必须处理一些奇怪的事情)。顺便说一句,您能否更好地定义“干净”的含义,必须应用哪些规则?如果您只需要不定期清理一些文件,您也可以使用原始 HTML Tidy (bit.ly/aahXs8) 而无需依赖包装器。
    • 我不需要处理 DOM,我只想缩进它。我特别想要一个 C# 版本,因为我需要在我的 C# 项目中使用它。我正在生成一些 HTML 作为字符串,我想获取该字符串,将其缩进,然后输出另一个字符串。不多也不少。认为很容易找到一个图书馆来做到这一点。
    • 那个代码项目看起来不错,但它也不能编译。 DLL 链接器错误。
    • 另外,我需要参考什么 DLL 才能访问 HtmlTextWriter?我在VS2010的任何地方都找不到它。 System.Web.UI 不存在。
    【解决方案6】:

    我过去曾使用SGML Reader 将HTML 转换为XHTML。可能值得研究...

    我在使用它时从未遇到任何问题。

    【讨论】:

    • 格式化一些 HTML 有点荒谬,但它确实有效。谢谢:)
    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多