2010-10-23 3 views
6

Я просто ищу простой способ очистки некоторых HTML (возможно, с помощью встроенного кода JavaScript). Я пробовал twodifferentHTML Tidy. NET-порты и оба исключают исключение ...C# версия HTML Tidy?

Извините, по словам «чистый» я имею в виду «отступ». 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

Таким образом, вы просто хотите переформатировать исходный код? Для этого вы можете использовать любой веб-идеал или Notepad ++. –

+0

@Nick: Я понимаю это, но я не пытаюсь переформатировать HTML-файлы, которые у меня уже есть. Я пытаюсь переформатировать HTML, который я генерирую в приложении C# ... – mpen

+0

проверить HtmlTextWriter, я обновил свой ответ –

ответ

8

Последняя оболочка C# для HTML Tidy была сделана Mark Beaton, которая кажется скорее более современной, чем ссылки, на которые вы ссылались (2003). Также стоит отметить, что Mark также предоставляет исполняемые файлы для ссылок, а не вытягивает их с официального сайта. Это должно сделать трюк красивой организации и проверки вашего HTML.

+2

Сборки предназначены только для тидилиба, а не для оболочки C#. Вам также нужно будет создать TidyManaged из источника. Я запускаю 64-битную машину, но по любой причине работает только 32-битная dll didylib. Мне пришлось положить его в c:/windows/system. Кроме того, пример Beaton предоставляет не будет отступать ваш HTML - единственное, что я хотел - вам нужно добавить 'doc.IndentBlockElements = AutoBool.Auto' ... немного сложно понять. – mpen

+0

Согласен, я пришел довольно не застрял после перехода на x64, и tidylib выбрасывает исключение «Исключение BadImageFormatException». Была сделана попытка загрузить программу с неправильным форматом. (Исключение из HRESULT: 0x8007000B) ». Добавлено сообщение об ошибке TidyManaged https: // github.com/markbeaton/TidyManaged/issues/3 – wonea

+0

Мне удалось получить эту работу над 64-разрядной версией Windows 7, изменив проект на x86 в Configuration Manager как на проект TidyManaged, так и на мой проект, который ссылается на него и использует 32-битную версию libtidy.dll. – ChrisR

3

UPDATE:

Проверить 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-кода, которая позволяет анализировать HTML-файлы вне Интернета. Парсер очень толерантен с искаженным HTML-кодом «реального мира». Объектная модель очень похожа на то, что предлагает System.Xml, но для HTML-документов (или потоков).

Html Agility Pack теперь поддерживает Linq для объектов (через интерфейс LINQ to Xml Like). Проверьте новые бета играть с этой функцией

Примерами применения: крепление

  • страницы или поколение. Вы можете исправить страницу так, как вы хотите, изменить DOM, добавить узлы, скопировать узлы, ну ... вы его назовете.

  • Веб-сканеры. Вы можете легко добраться до img/src или a/hrefs с помощью запросов XPATH.

  • Веб-скребки. Вы можете легко удалить любую существующую веб-страницу в RSS-канал , например, только файл XSLT , служащий связыванием. Это пример .


Также вы можете попробовать эту реализацию: A managed wrapper for the HTML Tidy library

+0

Я слышал и использовал HtmlAgilityPack много в прошлом ... но может ли он убирать HTML? – mpen

+0

HAP не является заменой для Tidy, а может вызывать DOM для вас, и вы можете обработать его соответствующим образом. Также Im не уверен, что он достаточно умен, чтобы анализировать искаженный HTML (если вам нужно обработать что-то странное). Кстати, можете ли вы определить немного лучше, что вы подразумеваете под «чистым», какие правила должны применяться? Также вы можете использовать оригинальный HTML Tidy (http://bit.ly/aahXs8), не полагаясь на обертку, если вам просто нужно очищать некоторые файлы не на регулярной основе. –

+1

Мне не нужно обрабатывать DOM, я просто хочу отступом. Я специально хочу версию C#, потому что мне нужно использовать ее в моем проекте C#. Я генерирую некоторый HTML как строку, я хочу взять эту строку, отменить ее и вывести другую строку. Не больше, не меньше. Подумал, что было бы легко найти библиотеку, чтобы сделать это. – mpen

1

Я использовал SGML Reader конвертировать HTML в XHTML в прошлом. Возможно стоит посмотреть ...

У меня никогда не было проблем с этим, когда я его использовал.

+1

Я действительно изучал это. Я не могу понять, как получить строку обратно ... – mpen

+2

Взгляните на эту ссылку: http://www.eggheadcafe.com/articles/20030317.asp –

+0

Немного смешно отформатировать некоторый HTML, но это Работа. Спасибо :) – mpen