2012-02-17 128 views
1

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

例如,在使用text功能这div元素,话 “程序”和“业务”连接到对方,我认为 这是不对的:

<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() + " "); 

Elementnodesjsoup的的线755和756之间源代码。

另外这个问题存在于Elements类的select包和可能在其他text功能!

回答

3

jsoup中的text()方法只返回元素中的文本。在你的例子中,你的元素是div。当调用其上的text()方法时,所有标签基本上都被删除,文本保持不变。由于程序后面没有任何空间,它看起来好像在业务上正好滑动,在这种情况下是正确的行为。

如果单独想要的文字,你可以做这样的事情(未测试的代码):

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

我只是按照你HTML示例。 – 2012-02-17 19:25:41

+0

您只考虑Element类,但Elements类如何?这个问题也引发了这个问题。在这种情况下,这样的结果(连接在逻辑上独立的词)是非常错误的。尽管可以手动避免这种错误的结果。最后,关于Element类,你认为在一般情况下(我们没有关于超级元素的知识,或者换句话说关于父元素),那么jsoup会为这些情况提供另一个API会很好吗?谢谢。 – faghani 2012-02-17 20:46:58