我正在阅读 Head First Android 开发书。在第三章中,他们尝试从此处的 NASA RSS 提要制作应用程序。
在本书中作者SAX parser
用于 Java。我在网上查看了一些关于 SO 的答案表明SAX 已经过时并且有更新的解决方案。
但是我不确定Java更容易使用的是什么。我用过Nokogiri
,Ruby
类似的东西会很棒。我看了看,jsoup
它看起来还不错,但我想知道你们可能有什么建议。
我正在阅读 Head First Android 开发书。在第三章中,他们尝试从此处的 NASA RSS 提要制作应用程序。
在本书中作者SAX parser
用于 Java。我在网上查看了一些关于 SO 的答案表明SAX 已经过时并且有更新的解决方案。
但是我不确定Java更容易使用的是什么。我用过Nokogiri
,Ruby
类似的东西会很棒。我看了看,jsoup
它看起来还不错,但我想知道你们可能有什么建议。
第 3 章的代码停止了,因为 Android 的主线程不支持网络。
因此,您可以使用任何解析器,例如 XmlPullParser,但请确保您在其主线程之外进行网络连接(下载提要等)。您可以使用 AsyncTask 将网络连接到主线程之外.. 或创建一个新的 Thread() 并在该线程中进行网络连接(推荐)
实际上,在第 4 章中,他们实际上确实创建了一个新线程来进行网络连接。因此,如果您改用第 4 章代码,它将起作用。
您可能面临的另一个问题是 OutOfMemoryError,因为如今美国宇航局的每日图像真的很大。因此,您必须使用 inSampleSize 对图像进行解码。您可以检查有关正确解码图像的其他问题以获得您想要的内容。祝你好运。))
我是《Head First Android Development》的作者,所以只是想谈谈一些想法。SAX 确实有点麻烦,但很简单,并且内置在 Android 中一段时间(因此决定在书中使用它)。我也是一名 Rails 开发人员,我是 nokogiri 的忠实粉丝,并且经常使用它。看着 jsoup,我绝对可以看到它很有用。也就是说,我还没有尝试过,所以我无法提供任何第一手经验。
另一个值得关注的选项是Android 中内置的XML PullParser 。它仍然很像 SAX,但功能更全。
希望这可以帮助。
我是 Jsoup 的忠实粉丝。我最近才开始使用它,它令人惊叹。我曾经写过一些超级毛茸茸的正则表达式模式来进行模式匹配,因为我想避免像瘟疫一样的 SAX ......你可以想象这非常乏味。Jsoup 让我只需几行代码就可以从 <table> 中解析出特定项目。
假设我想要获取 <tr class=...> 为 GridItem 或 GridAltItem 的表的前 7 行。然后,假设我们要将第一、第二和第三列打印为文本,然后是行中出现的第一个 <a href> 链接。听起来很傻,但我必须这样做,而且我可以很容易地做到这一点:
String page = "... some html markup fetched from somewhere ...";
Document doc = Jsoup.parse(page);
for(int x=0; x< 7; x++) {
Element gridItem = doc.select("tr[class$=Item]").select("tr").get(x);
System.out.println("row: " + gridItem.select("td").get(0).text() + " " + gridItem.select("td").get(1).text() + " " + gridItem.select("td").get(4).text() + " " + gridItem.select("a").get(0).attr("href"));
}
使用 Jsoup 就这么简单。确保将 Jsoup jar 文件作为库添加到项目中并导入所需的类:您不想导入错误的 Document 或 Element 类...
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
享受!
从1.6.2 版本开始,Jsoup 官方也支持 XML 解析。因此,这允许您使用类似 jQuery 的 CSS 选择器来解析 XML 和选择元素。要使用 Jsoup 创建 XML 文档,您需要以下方法而不是Jsoup#parse()
方法:
Document document = Parser.xmlParser().parseInput(xmlString, "");
// ...
这样输入就不会被隐式地视为 HTML5(因此,没有自动包含的<html><head>
标签等)。
我认为 SAX 是实现它的默认方式,但没有限制尝试新事物:)