Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中解析HTML_Android_Html_Parsing - Fatal编程技术网

在Android中解析HTML

在Android中解析HTML,android,html,parsing,Android,Html,Parsing,我试图在android中从一个网页解析HTML,由于该网页的格式不好,我得到了SAXException 有没有一种在Android中解析HTML的方法?你试过使用它吗 我认为该类在源代码质量方面是相当自由的(它在内部使用,这是根据现实生活中糟糕的HTML设计的)。虽然它不支持所有HTML标记,但它确实附带了一个处理程序,您可以实现它来对不理解的标记作出反应。也许您可以使用WebView,但正如您在文档中看到的那样,默认情况下WebView不支持javascript和其他类似小部件的东西 我认为

我试图在android中从一个网页解析HTML,由于该网页的格式不好,我得到了
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();
  }