C# версия HTML Tidy?
Я просто ищу действительно простой способ очистить некоторый 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();
}
6 ответов
Последняя оболочка C# для HTML Tidy была сделана Марком Битоном (Mark Beaton), которая выглядит более актуальной, чем ссылки, на которые вы ссылались (2003). Также стоит отметить, что Марк предоставляет исполняемые файлы для ссылок, а не извлекает их с официального сайта. Это должно помочь в организации и проверке вашего HTML.
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());
ОБНОВЛЕНИЕ:
Проверьте HtmlTextWriter или XhtmlTextWriter, использование: Форматирование вывода Html с помощью HtmlTextWriter, может быть лучше будет построить HTML через HtmlTextWriter?
Также проверьте: LINQ & Lambda, часть 3: Html Agility Pack для преобразования LINQ в XML
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, добавить узлы, скопировать узлы, ну... вы называете это.
Веб-сканеры. Вы можете легко добраться до img/src или a/hrefs с кучей запросов XPATH.
Веб-скребки. Например, вы можете легко скопировать любую существующую веб-страницу в канал RSS, просто связав его с файлом XSLT. Пример этого предоставляется.
Также вы можете попробовать эту реализацию: управляемая оболочка для библиотеки HTML Tidy
Я использовал SGML Reader для преобразования HTML в XHTML в прошлом. Может быть стоит посмотреть...
У меня никогда не было проблем с этим, когда я его использовал.
Вы можете использовать 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>
Beautifier предоставляет html, я использовал html-beautify. Например