ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – Jsoup:select()在不应该返回时返回空

2019-06-10 04:51:29  阅读:266  来源: 互联网

标签:java css-selectors html-parsing jsoup


我试图在维基百科的Google入门页面上选择信息框:http://en.m.wikipedia.org/wiki/Google

所以,我打电话给:

contentDiv = document.select("div[id=content]").first();

哪个按预期工作,然后我做:

Elements infoboxes = contentDiv.select("table[class=infobox]");

然后我检查了infoboxes.isEmpty(),我震惊地发现它是空的!

我检查并验证元素contentDiv包含以下内容:

<table class="infobox vcard" style="width: 22em;" cellspacing="5">

那么,为什么contentDiv.select(“table [class = infobox]”)返回空?

更新:我用contentDiv.select(“table [class = infobox vcard]”)测试了上面的内容,它运行正常!这很奇怪,因为我知道,与table.infobox.vcard表示法不同,table.infobox.vcard表示法只选择确切的多类元素,table [class = infobox]应该选择在列出的类中至少有信息框的所有表.

顺便说一下,我用a different Wikipedia entry测试了代码,其中包含:

<table class="infobox biota" style="text-align: left; width: 200px; font-size: 100%;">

而且contentDiv.select(“table [class = infobox]”)的行为完全符合预期,将该表元素作为信息框中的第一项返回.

知道为什么不一致吗?什么可以解释这种奇怪的行为?

有可能我偶然发现了一个Jsoup错误吗?

(我使用的是jsoup-1.5.2,不是最新的,但我不需要HTML5支持,由于各种原因,我无法立即升级到最新的1.6.1).

解决方法:

[attributename=attributevalue]选择器完全匹配.这在CSS selector spec中指定(强调我的):

[att=val]
        Match when the element’s “att” attribute value is exactly “val”.

您想要使用[attributename~=attributevalue]

Elements infoboxes = contentDiv.select("table[class~=infobox]");
// ...

或者,更好的是,.classname选择器:

Elements infoboxes = contentDiv.select("table.infobox");
// ...

也可以看看:

> CSS selector specattribute selectorsclass selectors
> Jsoup selector cookbook
> Jsoup Selector API

至于您使用不同维基百科条目的测试,我无法重现这一点.但我可以说这个页面包含另一个< table class =“infobox”>这必须是你实际检索的那个.

标签:java,css-selectors,html-parsing,jsoup
来源: https://codeday.me/bug/20190610/1209519.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有