[英]JSoup Parse HTML for Webview
我需要在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,以便我仅显示所需的表,将非常感谢您的帮助。
将此替换为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();
}
这并不是真正针对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(请参阅此处 ),看看是否有任何异常,尤其是NetworkOnMainThreadException
(您可能会得到的例外,请参见此处) 。
让我知道它是否有效,如果无效,我将在Android设备上尝试看看。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.