在Android中解析HTML
我试图在android中从一个网页解析HTML,由于该网页的格式不好,我得到了在Android中解析HTML,android,html,parsing,Android,Html,Parsing,我试图在android中从一个网页解析HTML,由于该网页的格式不好,我得到了SAXException 有没有一种在Android中解析HTML的方法?你试过使用它吗 我认为该类在源代码质量方面是相当自由的(它在内部使用,这是根据现实生活中糟糕的HTML设计的)。虽然它不支持所有HTML标记,但它确实附带了一个处理程序,您可以实现它来对不理解的标记作出反应。也许您可以使用WebView,但正如您在文档中看到的那样,默认情况下WebView不支持javascript和其他类似小部件的东西 我认为
SAXException
有没有一种在Android中解析HTML的方法?你试过使用它吗
我认为该类在源代码质量方面是相当自由的(它在内部使用,这是根据现实生活中糟糕的HTML设计的)。虽然它不支持所有HTML标记,但它确实附带了一个处理程序,您可以实现它来对不理解的标记作出反应。也许您可以使用WebView,但正如您在文档中看到的那样,默认情况下WebView不支持javascript和其他类似小部件的东西
我认为如果需要,可以启用javascript。我刚刚遇到了这个问题。我试了一些东西,但还是决定用它。jar大约是132k,这有点大,但是如果你下载源代码并去掉一些你不会使用的方法,那么它就没有那么大了
=>它的优点是可以处理格式错误的HTML 这是他们网站上的一个很好的例子
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
//http://jsoup.org/cookbook/input/load-document-from-url
//Document doc = Jsoup.connect("http://example.com/").get();
Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
}
String tmpHtml=“一大堆html内容”;
字符串htmlTextStr=Html.fromHtml(tmpHtml.toString();
我们都知道编程有无限的可能性。一个问题有很多解决方案,所以我认为以上所有的解决方案都是完美的,可能对某些人有帮助,但对我来说,这一个拯救了我的一天
所以代码是这样的
private void getWebsite() {
new Thread(new Runnable() {
@Override
public void run() {
final StringBuilder builder = new StringBuilder();
try {
Document doc = Jsoup.connect("http://www.ssaurel.com/blog").get();
String title = doc.title();
Elements links = doc.select("a[href]");
builder.append(title).append("\n");
for (Element link : links) {
builder.append("\n").append("Link : ").append(link.attr("href"))
.append("\n").append("Text : ").append(link.text());
}
} catch (IOException e) {
builder.append("Error : ").append(e.getMessage()).append("\n");
}
runOnUiThread(new Runnable() {
@Override
public void run() {
result.setText(builder.toString());
}
});
}
}).start();
}
您只需在main活动的onCreate方法中调用上述函数即可
我希望这个对你们也有帮助
另外,请阅读位于的原始博客,我怀疑Rhino的依赖性会使htmlunit在Android上的编译变得非常困难,但你可以试试。。。另外,其他一些非严格的HTML解析器(如soup)也可以使用。我想知道这里是否可以使用webkit。是的,您可以轻松地启用JS。但不需要使用webview进行html解析。这并不能回答这个问题。您可以尝试包含完整的jar,并在生产版本中的应用程序上运行ProGuard以删除未使用的代码。注意:JSoup非常慢。@kevin这一说法的来源是什么?您可能启用了一些调试。在客户端呈现html页面时,如何使用java脚本动态加载内容?Jsoup也会显示此内容吗?这很简单,我无法搜索确切的内容(如XPATH),请注意。这将“挂起所有线程”。当我得到一个包含html格式文本的json时,我会面临更大的压力。正确显示html文本没有问题,但在使用html.fromhtml()后,我面对这个问题。漂亮简单,没有插件,喜欢它!tnx注意:对从Html.fromHtml(str)
返回的span
对象调用toString()
,将使许多Html
标记无法工作(包括
)。因此,如果您要设置文本视图,只需执行以下操作:myTextView.setText(Html.fromHtml(str))
@Sakiboy您是对的。除此之外,还有许多其他标记不适用于Html.fromHtml()
。看看这个棒极了,正是我想要的,我的服务器端开发人员向我发送了html,现在我可以轻松地将其转换为原始字符串,谢谢
private void getWebsite() {
new Thread(new Runnable() {
@Override
public void run() {
final StringBuilder builder = new StringBuilder();
try {
Document doc = Jsoup.connect("http://www.ssaurel.com/blog").get();
String title = doc.title();
Elements links = doc.select("a[href]");
builder.append(title).append("\n");
for (Element link : links) {
builder.append("\n").append("Link : ").append(link.attr("href"))
.append("\n").append("Text : ").append(link.text());
}
} catch (IOException e) {
builder.append("Error : ").append(e.getMessage()).append("\n");
}
runOnUiThread(new Runnable() {
@Override
public void run() {
result.setText(builder.toString());
}
});
}
}).start();
}