下午好(取决于您居住的地方)!
我对 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 解析时,人们通常会遇到任何正常的“新手”问题吗???
预先感谢您提供的任何帮助!
我同意Jave的回答。最好的选择是VTD-XML库 这个例子演示了如何使用这个库。
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);
}
}
}
}
}
它对我有用,希望对你有帮助。