shiza
Авг. 24, 2008 22:52:28
Хочу решить такую задачу:
Превратить HTML в XML (FB2).
Казалось бы… беру понравившийся парсер… и бегу по тегам рекурсивно, попутно формируя XML -ку.
Но XML-ки разрешенная структуру довольно строгая. В каком-то месте можно вставить определненные теги, в каких-то нет.. (все схемой определяется).
Например, если родительский тег такой, а надродительский еще такой… то картинку можно, а если надродительский тег другой - то уже нельзя.
Т.е. XML-ка более ограниченная, чем HTML-ка.
Никто не подскажет - как такие штуки решаются (принимаются любые предложения)?
Ferroman
Авг. 25, 2008 00:44:26
Переводить в промежуточный формат (например, не такой строгий XML) а уже из него формировать XML.
На самом деле - задача сложная. HTML - формат допускающий разное трактование и написание. Переводить его в строгую структуру врятли получится без конфликтов. Получится либо избыточно, либо ущербно.
bw
Авг. 25, 2008 00:50:59
html5lib, если я правильно понял задачу.
..bw
shiza
Авг. 25, 2008 01:09:57
Ferroman
Переводить в промежуточный формат (например, не такой строгий XML) а уже из него формировать XML.
хм. Мне кажется, задача от этого не изменится.
Ferroman
На самом деле - задача сложная. HTML - формат допускающий разное трактование и написание. Переводить его в строгую структуру врятли получится без конфликтов. Получится либо избыточно, либо ущербно.
Я выбрал вариант - ущербно.
bw
html5lib, если я правильно понял задачу.
А в каком качестве ее использовать? Я слышал про нее, как пожалуй наилучший из парсеров HTML в DOM, tree или soap структуры.
Ferroman
Авг. 25, 2008 10:34:19
Мне кажется, задача от этого не изменится.
Ну почему же? В такой задаче основная проблема - учесть все исключения. Это гораздо проще с переводом сначала в буферный XML. И ошибки ловить легче. И сразу видны моменты “двузначности” и “неопределённости”.
Но может я и усложняю, но по моему это случай “Divide et impera”.
bw
Авг. 25, 2008 15:56:47
shiza
А в каком качестве ее использовать?
В качестве валидирующего парсера HTML.
HTML -> DOM/ElementTree/BeautifulSoup -> XML (XHTML)
p.s. Работает относительно медленно. Вернее это, пожалуй, будет самым тормазнутым решением.
..bw
shiza
Авг. 26, 2008 15:35:47
Ferroman Да. Чем больше думаю, тем больше мне кажется что это имеет смысл.
bw Скорость мне не критична. Но. Я привык к BeautifulSoup интерфейсу. А html5lib пока еще в некоторых случаях вылетает - когда парсишь в BeautifulSoup. Поэтому сейчас сначала прогоняю через html5lib - для корректировки кривых html (как корректор - ему нет равных). А потом расапрсиваю результат нативным BeautifulSoup.
bw
Авг. 26, 2008 16:45:49
Я тоже сначала работал с супом, но при переходе на html5lib пришлось учить xpath. Выучил, проблем не испытываю, очень мощная вещь.
p.s. Тренироваться в xpath удобно, используя специальные плагины к Firebird (я использую xpather).
..bw
shiza
Сен. 4, 2008 05:20:21
В общем проблема была в подходящем алгоритме, и я его нашел. Если у кого возникнет похожая задача - распишу подробно.