2012-02-17 126 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