Почему Jsoup не может выбрать элемент td?

Я сделал небольшой тест (с Jsoup 1.6.1):

String s = "" +Jsoup.parse("<td></td>").select("td").size();
System.out.println("Selected elements count : " + s);

Он выводит:

Selected elements count : 0

Но он должен вернуть 1, потому что я проанализировал html с элементом td. Что не так с моим кодом или ошибка в Jsoup?


person newbie    schedule 02.11.2011    source источник


Ответы (2)


Поскольку Jsoup — это HTML5-совместимый синтаксический анализатор, и вы отправили ему недопустимый HTML. <td> должен входить как минимум в <table>.

int size = Jsoup.parse("<table><td></td></table>").select("td").size();
System.out.println("Selected elements count : " + size);
person BalusC    schedule 02.11.2011
comment
Ну зачем он парсит ‹table›‹tr›‹td›‹/td›‹/tr›‹/table›, если он не содержит body и т.д. необходимых элементов? Я думаю, что он должен иметь возможность анализировать эти элементы, потому что большую часть времени вы хотите обрабатывать фрагменты, и весь смысл в получении HTML элемента. - person newbie; 02.11.2011
comment
Jsoup неявно анализирует его относительно <body>, когда фрагмент не содержит <html><head><body>. <td> не может относиться к <body>, а только к <table>. - person BalusC; 02.11.2011
comment
Фактически, теги ‹body›, ‹head› и ‹html› являются не обязательными тегами в соответствии со спецификацией html. Но ‹td› должен находиться внутри ‹table›. - person Matthew Gilliard; 05.02.2012
comment
w3.org/TR/html401/struct/global.html# h-7.3 - ссылка на мой предыдущий комментарий. - person Matthew Gilliard; 05.02.2012

Jsoup 1.6.2 позволяет выполнять синтаксический анализ с помощью различных синтаксических анализаторов, а также предоставляется простой синтаксический анализатор XML. С помощью следующего кода я мог бы решить свою проблему. Позже вы можете проанализировать свой фрагмент с помощью анализа HTML, чтобы получить действительный HTML.

// Jsoup 1.6.2
String s = "" + Jsoup.parse("<td></td>", "", Parser.xmlParser()).select("td").size();
System.out.println("Selected elements count : " + s);
person newbie    schedule 23.04.2012