我只是在寻找一种非常简单的方法来清理一些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();
}
答案 0 :(得分:9)
HTML Tidy的最新C#包装器由Mark Beaton完成,它似乎比您引用的链接(2003)更新。另外值得注意的是,Mark也提供了可引用的可执行文件,而不是从官方网站上提取它们。这应该可以很好地组织和验证您的HTML。
答案 1 :(得分:3)
<强>更新强>:
检查HtmlTextWriter或XhtmlTextWriter,使用情况: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 用作绑定的文件。一个 提供了这方面的例子。
答案 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>