Разбор фрагментов NekoHTML SAX - PullRequest
       10

Разбор фрагментов NekoHTML SAX

1 голос
/ 03 сентября 2011

Я пытаюсь разобрать простой фрагмент HTML с помощью NekoHTML:

<h1>This is a basic test</h1>

Для этого я установил особенность Neko , чтобы тег HTML, HEAD или BODY не вызывал обратный вызов startElement (..).

К сожалению, это не работает для меня ... Я, конечно, что-то упустил, но не могу понять, что это будет.

Вот очень простой код для воспроизведения моей проблемы:

 public static class MyContentHandler implements ContentHandler {

     public void characters(char[] ch, int start, int length) throws SAXException {
         String text = String.valueOf(ch, start, length);
         System.out.println(text);
     }

     public void startElement(String nameSpaceURI, String localName, String rawName, Attributes attributes) throws SAXException {
         System.out.println(rawName);
     }

     public void endElement(String nameSpaceURI, String localName, String rawName) throws SAXException {
         System.out.println("end " + localName);
     }
 }

И main () для запуска теста:

  public static void main(String[] args) throws SAXException, IOException {
       SAXParser saxReader = new SAXParser();
       // set the feature like explained in documentation : http://nekohtml.sourceforge.net/faq.html#fragments
       saxReader.setFeature("http://cyberneko.org/html/features/balance-tags/document-fragment", true);
       saxReader.setContentHandler(new MyContentHandler());
       saxReader.parse(new InputSource(new StringInputStream("<h1>This is a basic test</h1>")));
  }

Соответствующий вывод:

HTML
HEAD
end HEAD
BODY
H1
This is a basic test
end H1
end BODY
end HTML

тогда как я ожидал

H1
This is a basic test
end H1

Есть идеи?

1 Ответ

0 голосов
/ 07 сентября 2011

Я наконец получил это!

На самом деле, я анализировал мою HTML-строку в приложении GWT, где я добавил зависимость gwt-dev.jar. Этот jar-пакет содержит множество внешних библиотек, таких как xercesImpl. Но версия встроенных классов Xerces не соответствует версии, требуемой NeokHTML.

В результате (странно) получается, что парсер NeokHTML SAX не использовал никаких пользовательских функций при использовании встроенной версии xerces для gwt-dev.

Итак, мне пришлось переделать некоторый код, чтобы удалить зависимость gwt-dev, которая, кстати, не рекомендуется добавлять в любой стандартный проект GWT.

...