我如何可以加快Android的XML解析?(How Can I Speed Up Android X

2019-08-05 05:43发布

下午好(这取决于你住的地方)!

我是相当新的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解析时,人们通常会遇到???

预先感谢您的帮助,您可以提供!

Answer 1:

使用VTD-XML的 。

这里有一些基准。

此外,模拟器是极其缓慢的,所以尝试在真实设备上,你可能会看到很大的改进。



Answer 2:

我同意的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);
                 } 

            }
        }
     }
}

它为我工作,希望它可以帮助你。



文章来源: How Can I Speed Up Android XML Parsing?