Question
Selon cette réponse :
HTML 4.01 spécifie que les éléments ne peut contenir que des éléments en ligne. UNE
est un élément de bloc, de sorte qu'il peut semblent pas à l'intérieur d'un .Mais ...
HTML5 permet de contenir les éléments blocs.
Eh bien, je viens d'essayer la sélection d'un
<div class="m">
dans un bloc de<a>
, en utilisant:Elements elems = a.select("m");
et les retours des Elmes vides, malgré la div être là.
Alors je pense: Soit je ne suis pas en utilisant la syntaxe correcte pour la sélection d'un div dans un ou une ... Jsoup ne supporte pas cette fonctionnalité HTML5 seule
Quelle est la bonne syntaxe Jsoup pour sélectionner un
div
dans una
?Mise à jour : Je viens d'essayer
Elements elems = a.getElementsByClass("m");
Et Jsoup n'a eu aucun problème avec elle (à-dire qu'elle renvoie le nombre correct de ces divs dans un).
Alors, ma question est maintenant: pourquoi
Pourquoi le travail de
a.getElementsByClass("m")
alors quea.select("m")
ne fonctionne pas?Mise à jour : Je viens d'essayer, par la suggestion de @Delan Azabani:
Elements elems = a.select(".m");
et cela a fonctionné. Donc, fondamentalement, les travaux de
a.select()
mais je manque le.
devant le nom de la classe.
La solution
La fonction select
prend un sélecteur. Si vous passez 'm'
comme argument, il va essayer de trouver des éléments de m
qui sont des enfants de l'élément a
. Vous devez passer '.m'
comme argument, qui trouvera des éléments avec la classe m
sous l'élément a
.
Autres conseils
La version actuelle de jsoup (1.5.2) supporte les balises div
imbriquées dans les balises a
.
Dans des situations comme cela, je suggère l'impression de l'arbre d'analyse syntaxique, pour faire en sorte que jsoup a analysé le code HTML comme vous attendez, ou si elle n'a pas de savoir ce que le sélecteur correct à utiliser.
par exemple:.
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);
Donne:
Parse tree:
<html>
<head></head>
<body>
<a href="./">
<div class="m">
Check
</div></a>
</body>
</html>
Div in A:
<div class="m">
Check
</div>