检索jsoup中元素的文本

时间:2012-02-17 18:29:44

标签: java jsoup

当我使用jsoup来解析我遇到的一些html文件,例如“google.com” 在检索元素的文本时遇到问题。

例如,在使用div函数的text元素中,单词 我认为“程序”和“业务”是相互依存的 这不对:

<div id="fll" style="margin:19px auto;text-align:center">
   <a href="/intl/en/ads/">Advertising&nbsp;Programs</a>
   <a href="/services/">Business Solutions</a>
   <a href="https://plus.google.com/" rel="publisher">+Google</a>
   <a href="/intl/en/about.html">About Google</a>
</div>

您可以使用以下代码测试我的声明:

URL url = new URL("http://www.google.com");
Document document = Jsoup.parse(url, 10000);
Element element = document.select("div[id=fll]").first();
System.out.println(element.text());

输出将是:

Advertising ProgramsBusiness Solutions+GoogleAbout Google

我想知道有什么可以做的吗?

顺便说一下,我跟踪代码,发现问题就出现了 通过添加此行进行更正:

textNode.text(textNode.text() + " ");

Element源代码的nodes包的jsoup类的第755行和第756行之间的

此问题也存在于Elements包的select类中,可能存在于其他text函数中!

1 个答案:

答案 0 :(得分:3)

jsoup中的text()方法仅返回元素中的文本。在您的示例中,您的元素是div。在其上调用text()方法时,基本上删除了所有标记并保留了文本。由于程序之后没有任何空格,因此它看起来好像在Business上滑动,在这种情况下是正确的行为。

如果您想单独使用文本,可以执行以下操作(未经测试的代码):

for (Element a : div.select("a")) {
     System.out.println(a.text());
}