9

我只是在寻找一种非常简单的方法来清理一些 HTML(可能使用嵌入式 JavaScript 代码)。我尝试了两个 不同的 HTML 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();
}
4

6 回答 6

13

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();

塞巴斯蒂安编辑:

 //old parse method
 var document = parser.Parse("<html><head></head><body><i></i></body></html>");

 //new parse method  -Updated version (Nuget Package AngleSharp 0.16.1): 
 var document = await parser.ParseDocumentAsync(Code); 
 
于 2018-10-18T12:46:10.657 回答
9

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

于 2011-01-11T14:39:21.890 回答
3

更新

检查HtmlTextWriterXhtmlTextWriter,用法:使用 HtmlTextWriter 格式化 Html 输出,也许通过 HtmlTextWriter 构建 HTML会更好?

另请查看:LINQ 和 Lambda,第 3 部分:Html Agility Pack to LINQ to XML Converter

http://www.manoli.net/csharpformat/,这里是源代码,以防你错过。


也许你想自己做?这个项目可能会有所帮助: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,添加节点,复制节点,嗯......你命名它。

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

  • 网络刮板。例如,您可以轻松地将任何现有网页剪贴到 RSS 提要中,只需一个 XSLT 文件作为绑定。提供了一个示例。


您也可以尝试此实现:HTML Tidy 库的托管包装器

于 2010-10-23T03:40:44.783 回答
1

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

当我使用它时,我从来没有遇到过任何问题。

于 2010-10-23T03:59:51.853 回答
1

您可以使用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>
于 2019-04-17T19:26:36.140 回答
0

Beautifier 提供了 html 我使用了 html-beautify。例如

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

于 2021-07-10T06:10:42.517 回答