2011-09-27 68 views
2

我使用JSoup解析這個HTML內容:如何在DOM對象中的兩個元素之間獲取文本?

<div class="submitted"> 
    <strong><a title="View user profile." href="/user/1">user1</a></strong> 
    on 27/09/2011 - 15:17 
    <span class="via"><a href="/goto/002">www.google.com</a></span> 
</div> 

它看起來像這樣的網絡瀏覽器:

user1 on 27/09/2011 - 15:17 www.google.com 

的用戶名和網站可以使用這個被解析成變量:

String user = content.getElementsByClass("submitted").first().getElementsByTag("strong").first().text(); 
String website = content.getElementsByClass("submitted").first().getElementsByClass("via").first().text(); 

但我不確定如何獲得「上27/09/2011 -15:17」到一個變量,如果我用

String date = content.getElementsByClass("submitted").first().text(); 

它還包含用戶名和網站?

任何幫助,將不勝感激。先謝謝了。

回答

2

您可以隨時刪除userwebsite元素像這樣(你能克隆你的submitted元素,如果你不想刪除的行動「傷害」你的文件):

public static void main(String[] args) throws Exception { 

    Document content = Jsoup.parse(
     "<div class=\"submitted\">" + 
     " <strong><a title=\"View user profile.\" href=\"/user/1\">user1</a></strong>" + 
     " on 27/09/2011 - 15:17 " + 
     " <span class=\"via\"><a href=\"/goto/002\">www.google.com</a></span>" + 
     "</div> "); 

    // create a clone of the element so we do not destroy the original 
    Element submitted = content.getElementsByClass("submitted").first().clone(); 

    // remove the elements that you do not need 
    submitted.getElementsByTag("strong").remove(); 
    submitted.getElementsByClass("via").remove(); 

    // print the result (demo) 
    System.out.println(submitted.text()); 
} 

輸出:

on 27/09/2011 - 15:17 
+0

這個竅門!非常感謝:) – markbse

0

然後你可以解析你得到的字符串。

String str[] = contentString.split(" "); 

然後你就可以建造你想要像這樣的字符串:

String str = str[1] + " " + str[2] + " - " + str[4]; 

這將提取您所需要的字符串。

+1

用戶名可以包含空間並導致問題,但 – markbse

+0

那麼你可以獲取用戶名和網絡爲變量,那麼它是沒有問題的提取給定的字符串寫入這樣的其他數據:contentString.replace(「用戶名」, 「」);和contentString.replace(「web」,「」);這將從字符串中刪除用戶名和網絡名稱,然後您可以修剪字符串以刪除之前和之後留下的空格。 – shake

0

選擇要搶文本之前的元素,然後獲得它的下一個兄弟節點(不是元素),這是一個文本節點:

Document doc = Jsoup.parse("<div class=\"submitted\">" + 
    " <strong><a title=\"View user profile.\" href=\"/user/1\">user1</a></strong>" + 
    " on 27/09/2011 - 15:17 " + 
    " <span class=\"via\"><a href=\"/goto/002\">www.google.com</a></span>" + 
    "</div> "); 
String str = doc.select("strong").first().nextSibling().toString().trim(); 
System.out.println(str); 

您也可以直接詢問其子文本節點和索引的元素(雖然引用由同級節點通常比索引更強大的):

Document doc = Jsoup.parse(
      "<div class=\"submitted\">" + 
    " <strong><a title=\"View user profile.\" href=\"/user/1\">user1</a></strong>" + 
    " on 27/09/2011 - 15:17 " + 
    " <span class=\"via\"><a href=\"/goto/002\">www.google.com</a></span>" + 
    "</div> "); 
String str = doc.select("div").first().textNodes().get(1).text().trim(); 
System.out.println(str); 
相關問題