Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога
HTML легко (HTML Agility Pack)
    Часто или редко, но многим приходилось иметь дело с разбором HTML страниц. И очень при этом повезет, если попадется XHTML страница, а как же быть с обычными HTML страницами, да еще и не всегда безошибочно составленными? Ведь хочется работать с ними как с XML документами, преобразовывать, делать обход и XPATH выборки ...

    Ранее приходилось не раз пользоваться HTML Tody, точне его обверткой для C#, но он не всегда верно работал, да и само по себе использование обверток не радует...  Ну, как минимум, меня Wink

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

    Итак, HTML Agility Pack от Simon Mourier.
    Очень полезная библиотека, предоставляющая нам класс HTMLDocument - полный аналог XMLDocument, но который с легкостью справляется с обычным HTML конетнтом.


HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href]")
{
    HtmlAttribute att = link.Attributes["href"];
    att.Value = FixLink(att);
}
doc.Save("file.htm");




Т.е. есть возможность конвертации в XHTML, преобразования XSLT, работа с DOM и выполнение XPATH запросов.
Все очень удобно и привычно, что не может не радовать..

Есть еще в библиотеке несколько других полезных классов, но с ними пока не работал.
В комплекте идут полезные примерчики конвертеров HTML -> RSS, HTML -> TXT, HTML -> XHTML .. .

Всем советую посмотреть ...


Posted: Monday, May 14, 2007 1:52 PM від demon_xxi
Помічено як: , ,

Коментарі

Mike Chaliy сказав:

Класна ліба, я її використовув два роки назад. Хоча в поточних проектах всеж таки обираю регекси.

# May 14, 2007 4:34 AM

demon_xxi сказав:

С RegExp есть неприятность в их тормознутости =)

Если нужно много значений выбрать, то, думаю, будет оправданней загрузить и разобрать весь контент в HTMLDocument. Ну и с XSLT оно получше дружит =)

# May 14, 2007 4:55 AM

Mike Chaliy сказав:

А ти вже порівнюівав "тормознутость" регексів версус HTMLAgilityPack? Просто мені здається, що HTMLAgilityPack програє скомпілованому регексу. У регекса багато займає тільки розбір синтаксису виразу. Далі коли йде просто робота со строками він нічим осболивим не відрізняється від тієї ж роботи зі строками в HTMLAgilityPack.

# May 16, 2007 1:07 AM

demon_xxi сказав:

Михаил, спорить не буду ибо действительно не сравнивал. Думаю все же от конкретной задачи зависит выбор. Тут еще есть момент, что с регекспами не многие умеют работать. Это тоже часто влияет на выбор решения. RegExp это действительно крепкий орешек.

# May 16, 2007 1:43 AM
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.