用于Webview的JSoup解析HTML

时间:2016-03-14 19:29:55

标签: java android html html-parsing jsoup

我需要在Android Studio的Webview中显示页面的一部分,该部分包含PDF。这是我需要的网站https://www.limerick.ie/council/weekly-planning-lists,我要展示的部分是http://i.imgur.com/S9Pwjte.png?1当我尝试运行我的代码时,Webview不显示任何内容并显示为空白。

这是我的代码

package com.example.john_000.jsouptest;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;

public class MainActivity extends Activity {
 public class HtmlParserActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView cardapio = (WebView) findViewById(R.id.webView);
        cardapio.getSettings().setJavaScriptEnabled(true);
        String data = "";
        Document doc = null;
        try {
            doc = Jsoup.connect("https://www.limerick.ie/council/weekly-planning-lists").get();
            Elements elements = doc.getElementsByClass("block-inner clearfix");
            for (Element element : elements) {
                data += element.outerHtml();
                data += "<br/>";
            }
            cardapio.loadData(data, "text/html", "UTF-8");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 }
}

如果有人知道如何解析此HTML以便我只显示所需的表格,那么我们将非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

用这个替换你的try-catch块:

try {
    doc = Jsoup.connect("https://www.limerick.ie/council/weekly-planning-lists").get();
    Elements elements = doc.select("div.block-inner.clearfix");
    for (Element element : elements) {
        if (!element.select("tbody").isEmpty()) {
            data = element.outerHtml() + "<br/>";
            break;
        }
    }
    cardapio.loadData(data, "text/html", "UTF-8");
} catch (IOException e) {
    e.printStackTrace();
}

答案 1 :(得分:0)

这不是特定于Android(没有我的Android设备方便),但这适用于Java:

String url = "https://www.limerick.ie/council/weekly-planning-lists";

Document document = Jsoup.connect(url).get();
Element div = document.select("table.sticky-enabled").first();

String text = div.outerHtml();
System.out.println(text);

它产生以下输出:

<table class="sticky-enabled"> 
 <thead>
  <tr>
   <th>Attachment</th>
   <th>Size</th> 
  </tr>
 </thead> 
 <tbody> 
  <tr class="odd">
   <td><span class="file"><img class="file-icon" alt="PDF icon" title="application/pdf" src="/modules/file/icons/application-pdf.png"> <a href="https://www.limerick.ie/sites/default/files/260216_applications_refused.pdf" type="application/pdf; length=6526" title="260216_applications_refused.pdf">26/02/16 Applications Refused</a></span></td>
   <td>6.37 KB</td> 
  </tr> 
  <tr class="even">
   <td><span class="file"><img class="file-icon" alt="PDF icon" title="application/pdf" src="/modules/file/icons/application-pdf.png"> <a href="https://www.limerick.ie/sites/default/files/260216_applications_granted.pdf" type="application/pdf; length=20585" title="260216_applications_granted.pdf">26/02/16 Applications Granted</a></span></td>
   <td>20.1 KB</td> 
[...]

因此,在您的代码中,您可以替换

Elements elements = doc.getElementsByClass("block-inner clearfix");
for (Element element : elements) {
    data += element.outerHtml();
    data += "<br/>";
}

使用

data = doc.select("table.sticky-enabled").first().outerHtml();

哪能为你提供完整的表格。

您的data字符串将包含表格的完整HTML,然后您可以像以前一样加载到WebView中。请注意,如果您将原始HTML加载到这样的WebView中,它将没有任何格式或样式,因为未加载样式表(CSS)。

如果不起作用:

  • 确保您的WebView在您的布局中可见。

  • 确保您已将“Internet”权限添加到AndroidManifest.xml。

  • 查看LogCat(请参阅here),看看是否有任何例外,尤其是NetworkOnMainThreadException(您可能会收到这些例外情况,请参阅here。 )

让我知道它是否有效,如果没有,我将试用Android设备并查看。