java – Jsoup:select()在不应该返回时返回空
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Jsoup:select()在不应该返回时返回空,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1804字,纯文字阅读大概需要3分钟。
内容图文
我试图在维基百科的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 spec – attribute selectors – class selectors
> Jsoup selector cookbook
> Jsoup Selector API
至于您使用不同维基百科条目的测试,我无法重现这一点.但我可以说这个页面包含另一个< table class =“infobox”>这必须是你实际检索的那个.
内容总结
以上是互联网集市为您收集整理的java – Jsoup:select()在不应该返回时返回空全部内容,希望文章能够帮你解决java – Jsoup:select()在不应该返回时返回空所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。