Разбор HTML с парсером SAX - PullRequest
       3

Разбор HTML с парсером SAX

6 голосов
/ 19 октября 2011

Я пытаюсь разобрать обычный HTML-файл с помощью SAX-парсера.

SAXBuilder builder2 = new SAXBuilder();
         try {
            Document sdoc = (Document)builder2.build(readFile);
            NodeList nl=sdoc.getElementsByTagName("body");
            System.out.println("nodelist>>>>>>>>>>>"+nl.getLength());

        } catch (JDOMException e1) {
            e1.printStackTrace();
        }

но я получаю исключение

Open quote is expected for attribute "{1}" associated with an  element type  "class".

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

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 19 октября 2011

Как говорит Flash, вам нужен анализатор HTML, а не анализатор XML.HTML - это не XML.

Хорошие парсеры, которые я использовал: Neko и TagSoup .Неко - хороший всесторонний парсер;TagSoup специально нацелен на то, чтобы иметь возможность анализировать все, независимо от того, насколько плохо сформирован.

2 голосов
/ 19 октября 2011

Вообще говоря, вы не можете анализировать HTML с помощью синтаксического анализатора XML:

  • Теги элементов HTML не обязательно должны совпадать во всех случаях.(Например, тег <p> не требует соответствующего тега </p>.) Это приведет к расщеплению терминала для синтаксического анализатора XML.

  • Реальный HTML печально известен тем, что его не используют.соответствует спецификации HTML, не говоря уже о XML-совместимом подмножестве HTML.

Однако если ваш входной документ XHTML, вы должны в теории иметь возможность использоватьсинтаксический анализатор XML, такой как SAX.Вы должны даже иметь возможность проверить документ по схеме XHTML.

2 голосов
/ 19 октября 2011

Пожалуйста, посмотрите на HtmlParser . Обычно SAX не является хорошим решением для анализа html.

...