【问题标题】:Jsoup Element.text() intermittent?Jsoup Element.text() 断断续续?
【发布时间】:2011-04-14 10:24:39
【问题描述】:

在下面的sn-p代码中:

  String linkHref = "";
  String linkText = "";
  Elements links = div.getElementsByTag("a");
  for (Element link : links) {
    linkHref = link.attr("href");
    linkText += link.text();              
    break;
  }           

linkText 有时是空的,即使我可以清楚地看到在 WebView 上 链接文本在那里

另一方面,linkHref 总是以正确的值结束。

什么可以解释这种看似断断续续的行为?

这是 Jsoup 中的错误吗?还有什么我可能遗漏的吗?

更新,下面回答@BalusC 的问题:Jsoup 版本是 jsoup-1.5.2 和 div.html() 说:

<div class="d2 dl"> 
 <a href="nextp.html" class="cO"><img src="images/no001.jpg" alt="" vspace="0" width="69" border="0" height="69" hspace="0" /></a> 
 <span class="bc">2.</span> 
 <a accesskey="2" href="nextp.html"> Subject line </a> 
</div> 
<p class="aG">Human resource policies are viewed as a valuable to understand the companies.</p> 
<div> 
</div>

【问题讨论】:

  • 什么网址?什么Jsoup版本? div.html() 说什么?
  • 为什么是break 指令?为什么不直接使用links[0]
  • @manji 很好的观察(+1)。您确定这两种形式是 100% 等效的吗?
  • @manji links[0] 产生“表达式的类型必须是数组类型,但它解析为元素”。您的意思可能是 links.get(0),但这仍然不好,因为如果 Elements 为空,它将产生 IndexOutOfBoundException。

标签: java html html-parsing jsoup


【解决方案1】:

第一个链接根本不包含文本。它包含一个图像。所以 Jsoup 的工作做得非常好。

您可能想先使用Element#hasText() 来检查链接是否有文字。

if (link.hasText()) {
    linkText += link.text();
}

【讨论】:

  • 我最终解决了这个问题,将 links = div.getElementsByTag("a"); 替换为 links = div.select("a[accesskey]" ); 感谢 + 1 建议将 div.html() 作为调试工具。