2017-06-05 97 views
0

我試圖從網頁中按順序從html獲取數據。 HTML代碼的樣子:按Jsoup順序獲取數據

<div class="text"> 
 

 
First Text 
 
<br> 
 
<br> 
 
<div style="margin:20px; margin-top:5px; "> 
 
\t <table cellpadding="5"> 
 
\t <tbody><tr> 
 
\t \t <td class="alt2"> 
 
\t \t \t \t <div> 
 
\t \t \t \t \t Written by <b>excedent</b> 
 
\t \t \t \t </div> 
 
\t \t \t \t <div style="font-style:italic">quote message</div> 
 
\t \t </td> 
 
\t </tr> 
 
\t </tbody></table> 
 
</div>Second Text<br> 
 
<br> 
 
<img class="img" src="https://developer.android.com/_static/images/android/touchicon-180.png"><br> 
 
<br> 
 
Third Text 
 
</div>

我想要做的就是創建一個Android佈局刮HTML,但我需要保留元素的順序。在這種情況下:

  1. 的TextView =>第一文本
  2. 的TextView =>報價消息
  3. 的TextView =>第二文本
  4. 的ImageView => IMG
  5. 的TextView =>第三文本

問題是當我試圖讓以HTML值,我們荷蘭國際集團JSoup我與「第一文本第二文本第三文本」與Element.ownText,一個然後在最後的img,產生一個字符串:

  1. 的TextView =>第一文本第二文本第三文本
  2. 的TextView =>報價信息
  3. 的ImageView => IMG

我能做些什麼來獲得,以便數據?

在此先感謝

+0

試試這個https://stackoverflow.com/questions/43754677/how-to-iterate-through-a-html-of-texts-and-attributes-in -their糾正階USI –

回答

0

您可以將html解析爲html節點列表。節點列表將保留DOM順序並給出你想要的。

檢查parseFragment方法:

這種方法會給你的節點列表。

0

試試這個。

String html = "" 
     + "<div class=\"text\">" 
     + " First Text" 
     + " <br>" 
     + " <br>" 
     + " <div style=\"margin:20px; margin-top:5px; \">" 
     + " <table cellpadding=\"5\">" 
     + "  <tbody><tr>" 
     + "   <td class=\"alt2\">" 
     + "    <div>" 
     + "     Written by <b>excedent</b>" 
     + "    </div>" 
     + "    <div style=\"font-style:italic\">quote message</div>" 
     + "   </td>" 
     + "   </tr></tbody>" 
     + " </table>" 
     + " </div>Second Text<br>" 
     + "  <br>" 
     + "  <img class=\"img\" src=\"https://developer.android.com/_static/images/android/touchicon-180.png\"><br>" 
     + "  <br>" 
     + "  Third Text" 
     + " </div>"; 
    Document doc = Jsoup.parse(html); 
    List<String> rootTexts = doc.select("div.text").first().textNodes().stream() 
     .map(node -> node.text().trim()) 
     .filter(s -> !s.isEmpty()) 
     .collect(Collectors.toList()); 
    System.out.println(rootTexts); 

OUTPUT:

[First Text, Second Text, Third Text]