下午好(这取决于你住的地方)!
我是相当新的Android开发,我目前正在从现有的iOS应用到Android移动功能。 此功能部分是解析“大”(〜13000线)RSS XML包含约500项文件。 我在任何地方从10-15个小时研究XML解析Android和尝试的主要XML解析器花:DOM,SAX和Pull-解析。 这里是我的结果,我的盒子内模拟器中运行(32位Windows Vista,2.2 GHz双CPU,3 GB RAM):
SAX:〜6:00分钟
拉解析:〜4:00分钟
DOM:比4:00分大,但并没有火候,当我有这样的执行编码。
我也试过这个RSS阅读器从GitHub,但我花> 10:00分:
https://github.com/matshofman/Android-RSS-Reader-Library
对于SAX,PP和DOM的实现都来自stackoverflow.com线程取,所以我觉得相当有信心,我没有做任何事情他们不规范的(虽然我不排除我这一点)。 我决定以吸引更大,经验更丰富,群众得到的还有什么我可以尝试一些想法。
我没有在文件格式的任何控制。 如果我实现这个目的到最后,我只想写做服务器上的所有繁重工作,然后向下发送小,结构紧凑,JSON序列化列表中的Web服务。 相反,我有13K行的文件。 :)
任何洞察我能做些什么? 这似乎是一个相当普遍的问题,但大多数答复只是说要尝试不同的主要XML解析器之一。 就我而言,我已经尝试了所有三个甚至是最快的方式似乎过于缓慢。
我究竟做错了什么? 是否有任何正常的“新手”的问题在Android手机上的网络做XML解析时,人们通常会遇到???
预先感谢您的帮助,您可以提供!
使用VTD-XML的 。
这里有一些基准。
此外,模拟器是极其缓慢的,所以尝试在真实设备上,你可能会看到很大的改进。
我同意的Jave的答案。 最好的选择是VDT-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);
}
}
}
}
}
它为我工作,希望它可以帮助你。