Java based HTML parser (DOM)?

User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Java based HTML parser (DOM)?

Post by OBender »

Какой есть хороший парсер? Нужно что бы строил DOM по HTML. JTidy не предлагать :)
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
wolfboy
Уже с Приветом
Posts: 1224
Joined: 24 Feb 2003 07:40

Post by wolfboy »

Html - произвольного формата? Допустимы ли незакрытые тэги типа <li> и <p>, допустимы ли ошибки и т.п.. Ну то есть какой уровень стандартизации нужен?
Спрашиваю не потому что что-то знаю, а просто интересно. :)
Может быть, при некотором дополнительном форматировании подойдет просто один из стандартных XML DOM-парсеров?...
User avatar
WildVlad
Уже с Приветом
Posts: 3982
Joined: 13 Jul 2000 09:01
Location: SVX -> BOS -> BUR -> SJC

Post by WildVlad »

На сколько я помню, там можно свой САКСоподобный парсер написать (в инете везде пример для CSV в статейках описан), а потом уже им можно и ДОМ построить :)
I hated LA
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

Ну написать можно моного чего :) только задача стоит совсем другая, а парсер в DOM нужен просто как тул для ее решения, т.е., время на то что бы писать парсер нету.

К вопросу о незакрытых тэгах, JTidy делает tag balancing но этот проект уже 3 года как не поддерживается (не обновляется) так что его стремно трогать.
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
Okie
Уже с Приветом
Posts: 932
Joined: 18 Mar 2000 10:01
Location: Seattle

Post by Okie »

User avatar
Okie
Уже с Приветом
Posts: 932
Joined: 18 Mar 2000 10:01
Location: Seattle

Post by Okie »

dup
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

WildVlad wrote:На сколько я помню, там можно свой САКСоподобный парсер написать (в инете везде пример для CSV в статейках описан), а потом уже им можно и ДОМ построить :)


Умм. С html проблемка получилась. Каждый браузер старался быть максимально толерантным к ошибкам безруких програмистов и по максимуму делал предположения о том например где же закакнчиватеся незакрытый тег и тому подобные ляпы. Но создавать стандарт на ошибки же никто не будет, поэтому браузеры несовместимы еще и в том как они обрабатывают неправильности.

Поэтому создание html парсера задача очень нетривиальная.

Xml стандарт адресовал эту проблему тем что он требует от парсера расценивать как критическую ошибку любое отсупление от стандарта. За счет этого пасеры становятся проще в реализации и более совместимы.
Никакой разрухи нет. (с) Проф. Преображенский.
User avatar
WildVlad
Уже с Приветом
Posts: 3982
Joined: 13 Jul 2000 09:01
Location: SVX -> BOS -> BUR -> SJC

Post by WildVlad »

Strannik223 wrote:Умм. С html проблемка получилась. Каждый браузер старался быть максимально толерантным к ошибкам безруких програмистов и по максимуму делал предположения о том например где же закакнчиватеся незакрытый тег и тому подобные ляпы.

Я прекрасно понимаю, более того, вот это вполне валидный HTML (as is, no other elements on the page like <html> and <body>) :

Code: Select all

normal <b> bold <i> bolditalic </b> italic </i> normal

(Сорри, форум корёжит пример - сделайте копи-пасте в файл)


IE умеет разруливать эту ситуацию, но DOM-дерево по такому построить очень не просто...
Хотя - можно просто всегда считать, что, например, <hr> всегда имеет пустое тело, </table> закрывает все тэги, открытые внутри таблицы (не знаю, может ли <form> быть открыт посередине одной таблицы а закрыт в середине следующей) ну и так далее - то есть для каждого тэга иметь список тэгов, которые автоматически закрываются при закрытии данного тэга, если они были открыты внутри данного тэга, и тех, которые автоматически переоткрываются.

Короче говоря, с некоторыми допущениями (а особенно, если забить на приведённый пример с болдо-италиками) вполне возможно написать более-менее хороший парсер для html - займёт день минус два :mrgreen:

Добавлено: Кстати, а этот Сановский чудо Java-браузер не экспозит ли API? а то типа можно выдернуть готовый ДОМ из него :mrgreen:
I hated LA

Return to “Вопросы и новости IT”