Jsoup: <div>в течение <a> - PullRequest
       11

Jsoup: <div>в течение <a>

1 голос
/ 29 апреля 2011

Согласно этому ответу :

HTML 4.01 указывает, что элементы могут содержать только встроенные элементы.

.

Но ...

HTML5 позволяет элементам содержатьблоков.

Я только что попытался выбрать <div class="m"> в блоке <a>, используя:

Elements elems = a.select("m");

, и elmes возвращается пустым, несмотря на то, что div там.

Поэтому я думаю: либо я не использую правильный синтаксис для выбора div внутри a, либо ... Jsoup не поддерживает эту функцию только для HTML5?

Что такоеПравильный синтаксис Jsoup для выбора div в a?

Обновление : Я только что попробовал

Elements elems = a.getElementsByClass("m");

И у Jsoup не было проблем с ним (т.е.он возвращает правильное количество таких div в пределах a).

Итак, мой вопрос сейчас: почему?

Почему a.getElementsByClass("m") работает, а a.select("m") не работает?

Обновление : Я только что попробовал, согласно предложению @Delan Azabani:

Elements elems = a.select(".m");

, и это сработало.Так что в основном a.select() работает, но мне не хватало . перед именем класса.

Ответы [ 2 ]

3 голосов
/ 29 апреля 2011

Функция select принимает селектор. Если вы передадите 'm' в качестве аргумента, он попытается найти элементы m, которые являются потомками элемента a. Вам нужно передать '.m' в качестве аргумента, чтобы найти элементы с классом m в элементе a.

1 голос
/ 29 апреля 2011

Текущая версия jsoup (1.5.2) поддерживает теги div, вложенные в теги a.

В подобных ситуациях я предлагаю распечатать дерево разбора, чтобы убедиться, что jsoup проанализировал HTML-код так, как вы ожидаете, или если он не знает, какой правильный селектор использовать.

например:.

Document doc = Jsoup.parse("<a href='./'><div class=m>Check</div></a>");
System.out.println("Parse tree:\n" + doc);
Elements divs = doc.select("a .m");
System.out.println("\nDiv in A:\n" + divs);

Дает:

Parse tree:
<html>
 <head></head>
 <body>
  <a href="./">
   <div class="m">
    Check
   </div></a>
 </body>
</html>

Div in A:
<div class="m">
 Check
</div>
...