Jsoup:
;在

发布于 2024-11-04 00:50:36 字数 1132 浏览 1 评论 0原文

根据这个答案

HTML 4.01 指定 元素 只能包含内联元素。一个

但...

HTML5 允许 要包含的元素 块。

好吧,我只是尝试在 块中选择

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

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

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

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

更新:我刚刚尝试过

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

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

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

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

更新:我刚刚尝试过,按照@Delan Azabani 的建议:

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

它有效。所以基本上 a.select() 可以工作,但我缺少类名前面的 .

According to this answer:

HTML 4.01 specifies that <a> elements
may only contain inline elements. A
<div> is a block element, so it may
not appear inside an <a>.

But...

HTML5 allows <a> elements to contain
blocks.

Well, I just tried selecting a <div class="m"> within an <a> block, using:

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

and elmes returns empty, despite the div being there.

So I am thinking: Either I am not using the correct syntax for selecting a div within an a or... Jsoup doesn't support this HTML5-only feature?

What is the right Jsoup syntax for selecting a div within an a?

Update: I just tried

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

And Jsoup had no problems with it (i.e. it returns the correct number of such divs within a).

So my question now is: Why?

Why does a.getElementsByClass("m") work whereas a.select("m") doesn't?

Update: I just tried, per @Delan Azabani's suggestion:

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

and it worked. So basically the a.select() works but I was missing the . in front of the class name.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半暖夏伤 2024-11-11 00:50:36

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

The select function takes a selector. If you pass 'm' as the argument, it'll try to find m elements that are children of the a element. You need to pass '.m' as the argument, which will find elements with the m class under the a element.

月下伊人醉 2024-11-11 00:50:36

当前版本的 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>

The current version of jsoup (1.5.2) does support div tags nested within a tags.

In situations like this I suggest printing out the parse tree, to ensure that jsoup has parsed the HTML like you expect, or if it hasn't to know what the correct selector to use.

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);

Gives:

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

Div in A:
<div class="m">
 Check
</div>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文