下午好(取决于你住的地方)!
我是Android开发的新手,我目前正致力于将功能从现有的iOS应用程序迁移到Android。此功能的一部分是解析包含大约500个条目的“大”(~13,000行)RSS XML文件。我花了10-15个小时在Android上研究XML解析并尝试使用主要的XML解析器:DOM,SAX和Pull-parsing。以下是我的结果,在我的盒子上的模拟器(32位Windows Vista,2.2 GHz双CPU,3 GB RAM)中运行:
SAX:~6:00分钟
拉 - 解析:~4:00分钟
DOM:大于4:00分钟,但是当我编写实现代码时没有计时。
我也从github尝试过这个RSS阅读器,但是花了> 10:00分钟:
https://github.com/matshofman/Android-RSS-Reader-Library
SAX,PP和DOM的实现都是从stackoverflow.com线程中获取的,所以我非常有信心我没有做任何非标准的事情(尽管如此,我并没有把它排除在外) 。我决定呼吁更大,更有经验的人群来了解我还能尝试的其他方法。
我无法控制文件的格式。如果我实现这种端到端的方式,我只会编写一个Web服务,在服务器上完成所有繁重工作,然后发送一个小型,紧凑的JSON序列化列表。相反,我有13K行文件。 :)
对我能做什么的任何见解?这似乎是一个相当普遍的问题,但大多数响应只是说尝试不同的主要XML解析器之一。在我的情况下,我已经尝试了所有三个,甚至最快似乎太慢了。
我做错了什么?在Android上通过网络进行XML解析时,人们通常会遇到任何正常的“新手”问题
提前感谢您提供任何帮助!
答案 0 :(得分:3)
答案 1 :(得分:1)
我同意 Jave的回答。最好的选择是VDT-XML library 此示例演示了如何使用此库。
XML文件:
<database name="products">
<table name="category">
<column name="catId">20</column>
<column name="catName">Fruit</column>
</table>
<table name="category">
<column name="catId">31</column>
<column name="catName">Vegetables</column>
</table>
<table name="category">
<column name="catId">45</column>
<column name="catName">Rice</column>
</table>
<table name="category">
<column name="catId">50</column>
<column name="catName">Potatoes</column>
</table>
</database>
源代码示例:
import com.ximpleware.AutoPilot;
import com.ximpleware.VTDGen;
import com.ximpleware.VTDNav;
String fileName = "products.xml";
VTDGen vg = new VTDGen();
if (vg.parseFile(fileName, true)) {
VTDNav vn = vg.getNav();
AutoPilot table = new AutoPilot(vn);
table.selectXPath("database/table");
while (table.iterate()) {
String tableName = vn.toString(vn.getAttrVal("name"));
if (tableName.equals("category")) {
AutoPilot column = new AutoPilot(vn);
column.selectElement("column");
while (column.iterate()) {
String text = vn.toNormalizedString(vn.getText());
String name = vn.toString(vn.getAttrVal("name"));
if (name.equals("catId")) {
Log.d("Category ID = " + text);
} else if (name.equals("catName")) {
Log.d("Category Name = " + text);
}
}
}
}
}
它对我有用,希望对你有所帮助。