Вопрос

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

HTML 4.01 указывает, что u003Ca>элементы могут содержать только встроенные элементы. Аu003C/a>u003Cdiv> u003Ca>является элементом блока, поэтому он может не появиться внутри u003Ca>.u003C/a>u003C/a>

Но...

HTML5 позволяет u003Ca>элементам содержать блоки.u003C/a>

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

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

И Элмс возвращается пустым, несмотря на то, что дифта был там.

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

Какой правильный синтаксис JSoup для выбора div внутри a?

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

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

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

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

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

Обновлять: Я только что попробовал, за предложение @delan Azabani:

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

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

Это было полезно?

Решение

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

Другие советы

Текущая версия 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top