Кавычки, вызывающие IllegalNameException при анализе HTML с помощью JDom2

Добрый вечер всем!

Я пытаюсь разобрать HTML-страницу на Java с помощью JDOM2, чтобы получить доступ к некоторой информации из нее.

Мой код выглядит так: (только что добавил пакеты для этого блока кода, их нет в моем реальном исходном коде)

//Here goes the reading of the site into my String "string" (using NekoHTML)

org.xml.sax.InputSource is = new InputSource();
is.setCharacterStream(new StringReader(string));

org.cyberneko.html.parsers.DOMParser parser = new DOMParser();
parser.parse(is);

org.jdom2.input.DOMBuilder builder = new DOMBuilder();
org.jdom2.Document doc = builder.build(parser.getDocument());

Это прекрасно работает для всего, кроме некоторых особых случаев: когда сайт содержит кавычки внутри элемента. Вот пример того, что я имею в виду:

<a href="LINK" title="Der "realismo mágico" und die Phantastische Literatur">Der "realismo mágico" und die Phantastische...</a>

Итак, после этого замечательного тега я получаю следующую трассировку ошибок:

SEVERE: org.jdom2.IllegalNameException: The name "literatur"" is not legal for JDOM/XML attributes: XML name 'literatur"' cannot contain the character """.

Итак, теперь мой вопрос: какие у меня есть варианты, чтобы позаботиться об этой ошибке? Может быть, есть функция в NekoHTML, которую я могу использовать для этого (используя «setFeature()»), или что-то в JDOM, которое я мог бы использовать?

Если нет: существуют ли другие библиотеки, подходящие для очистки веб-сайтов, которые могут принимать такие вещи, как кавычки внутри тега?

Спасибо за ваше время!


person Kirinkunhime    schedule 10.07.2014    source источник
comment
HTML-код недействителен. Возникла проблема со значением атрибута title.   -  person Henry    schedule 10.07.2014
comment
Что говорит Генри. DOM, который вы пытаетесь передать JDOM, недействителен. По сути, в нем есть то, что в «настоящем» XML выглядело бы так: literatur"="" что явно неверно. Он пытается сообщить JDOM, что имя атрибута (а не значение) literatur"   -  person rolfl    schedule 10.07.2014
comment
Ну, я предположил, что это не так, но это сайт, как я его чищу. Неужели нет возможности его изменить? Может быть, не просматривая всю страницу? Или просто использовать для этого другой парсер?   -  person Kirinkunhime    schedule 10.07.2014


Ответы (1)


Итак, я решил проблему следующим образом:

Поскольку не было никакой зависимости от NekoHTML, я переключился на jTidy в качестве синтаксического анализатора, который в данном случае выполняет свою работу.

Ответ на вопрос.

person Kirinkunhime    schedule 10.07.2014