Разбор HTML в Java линейно - PullRequest
       2

Разбор HTML в Java линейно

0 голосов
/ 08 декабря 2011

Хорошо, я пытаюсь разобрать что-то вроде этого

Привет Мир Подчеркнуто

линейно .

Я искал в сети, и он всегда дает мне парсер DOM, а это не то, что мне нужно.

Мне нужен вывод, который бы представлял собой дерево, подобное этому:

                            p
                           / \ \
                      Hello   b  u
                              |   \
                           World  underlined

По сути, мне нужно разобрать HTML в Java и попытаться его интерпретировать (отобразить графический интерфейс из тегов HTML).

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2011

Использование SAX-анализатора, вероятно, то, что вам нужно, потому что он читает исходный документ от начала до конца, вызывая ваш код для каждого найденного узла.

SAX - это синтаксический анализатор XML, и большая часть HTML не является идеальным XML. Таким образом, чтобы использовать SAX, вам нужен инструмент, который может обрабатывать несовершенные данные. Я предлагаю TagSoup , который является бесплатным и лицензирован Apache.

Затем вы пишете класс, который реализует org.xml.sax.ContentHandler . Этот класс будет получать обратные вызовы от синтаксического анализатора SAX, когда синтаксический анализатор читает ваш ввод. Он должен вызывать методы в вашем коде так:

startElement("p")
characters("Hello")
startElement("b")
characters("World")
endElement("b")
startElement("u")
characters("Underlined")
endElement("u")
endElement("p")

(Реальные методы в ContentHandler имеют еще несколько параметров, которые я упустил из примера для простоты)

0 голосов
/ 08 декабря 2011

Вам нужно объяснить, что вы подразумеваете под Линейным.Если вы хотите проанализировать и получить каждый тег, то DOM-парсер является одним из вариантов.Но для больших файлов HTML анализатор DOM работает медленно.В качестве альтернативы вы можете использовать SAX-парсер и создать свой собственный парсер.Dom parser внутренне использует SAX parser

...