Jsoup:<a></a> </div>中的<div>

时间:2011-04-29 03:45:19

标签: html html-parsing jsoup

根据this answer

  

HTML 4.01指定&lt; a&gt;分子   可能只包含内联元素。一个   &LT; DIV&GT;是一个块元素,所以它可能   不会出现在&lt; a&gt;。

但是...

  

HTML5允许&lt; a&gt;要包含的元素   块。

好吧,我刚刚尝试在<div class="m">块中选择<a>,使用:

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

并且elmes返回空,尽管div在那里。

所以我在想:要么我没有使用正确的语法来选择a中的div还是... Jsoup不支持这个仅HTML5的功能?

div中选择a的Jsoup语法是什么?

更新:我刚试过

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

Jsoup对此没有任何问题(即它在a中返回正确数量的此类div)。

所以现在我的问题是:为什么?

为什么a.getElementsByClass("m")有效,而a.select("m")没有?

更新:我刚试过,根据@Delan Azabani的建议:

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

它有效。所以基本上a.select()可以正常工作,但我错过了班级名称前面的.

2 个答案:

答案 0 :(得分:3)

select函数采用选择器。如果您将'm'作为参数传递,它将尝试查找m元素的子元素a元素。您需要传递'.m'作为参数,该参数将在m元素下找到a类的元素。

答案 1 :(得分:1)

当前版本的jsoup(1.5.2)支持嵌套在div标记内的a个标记。

在这种情况下,我建议打印出解析树,以确保jsoup像您期望的那样解析HTML,或者它是否不知道要使用的正确选择器。

E.g:

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>