Разбор html и javascript с помощью Jsoup

#javascript #java #html #jsoup #html-parsing

#javascript #ява #HTML #jsoup #html-синтаксический анализ #java

Вопрос:

Я анализирую HTML-строку, содержащую html-теги и теги javascript, используя следующее

 public Document parse(String content) {
    return Jsoup.parse(content, "", Parser.xmlParser());
  }
  

Проблема в том, что элементы javascript были включены только в одну строку.

Кроме того, я попробовал с

 public Document parse(String content) {
    return Jsoup.parse(content, "", Parser.htmlParser());
  }
  

и это прекрасно работает для Javascript… но HTML-элементы были включены без конечного тега. Бывший:

 <link rel="shortcut icon" href="../../static/public/img/favicon.ico" data-th-remove="all"></link>
  

был проанализирован как

 <link rel="shortcut icon" href="../../static/public/img/favicon.ico" data-th-remove="all">
  

Это не работает, когда я запускаю свое приложение.

Как я могу это исправить? Есть ли какой-нибудь способ проанализировать HTML и Javascript вместе с помощью JSOUP?

ПРИМЕЧАНИЕ: я только что создал следующую проблему на JSOUP GitHub https://github.com/jhy/jsoup/issues/774

С уважением,

Ответ №1:

У link элемента нет закрывающего тега в HTML. Это происходит только в заголовке. Смотрите https://developer.mozilla.org/de/docs/Web/HTML/Element/link для пояснений.

Итак, JSoup ведет себя так, как ожидалось, когда вы используете Parser.htmlParser()

Cab вы объясните более подробно, почему вы не можете обработать незакрытый link тег?

Комментарии:

1. Спасибо за ваш комментарий. Наконец, проблема заключалась в том, что я использовал Thymeleaf 2.1.5, предоставляемый Spring IO Platform. В этой версии Thymeleaf для разбора HTML-файла используется анализатор XML, поэтому все теги должны иметь свой собственный конечный тег. Обновление до Thymeleaf 3.0 и использование Parser.htmlParser() я решил проблему. Чтобы увидеть подробное объяснение решения, проверьте проблему на GitHub github.com/jhy/jsoup/issues/774 . С уважением и благодарностью за вашу помощь.