C#版的HTML Tidy?

时间:2010-10-23 03:37:19

标签: c# .net html htmltidy

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

6 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

<强>更新

检查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代码库,允许您解析“out of the web”HTML文件。解析器非常容忍“真实世界”格式错误的HTML。对象模型与提出System.Xml非常类似,但对于HTML文档(或流)。

     

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

     

示例应用程序:

     
      
  • 页面修复或生成。您可以   按照您想要的方式修改页面,进行修改   DOM,添加节点,复制节点,   嗯...你说出来的。

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

  •   
  • 网页抓取工具。你可以很容易地报废   任何现有的网页都成为RSS   例如,仅使用XSLT   用作绑定的文件。一个   提供了这方面的例子。

  •   

您也可以尝试此实现:A managed wrapper for the HTML Tidy library

答案 2 :(得分: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());

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

您可以使用 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>

答案 5 :(得分: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>