Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 加载和查询大型xml文件_Android_Sax_Xmlpullparser_Xml - Fatal编程技术网

Android 加载和查询大型xml文件

Android 加载和查询大型xml文件,android,sax,xmlpullparser,xml,Android,Sax,Xmlpullparser,Xml,我正在构建一个android应用程序,我有一个xml文件,它是我的数据源,我加载它以使用XPath进行查询,然后将结果加载到ListView中。当xml文件开始变大(高达10MB)时,问题就出现了。我想这意味着我的记忆力可能会有问题。我想知道在不损害设备内存或浪费宝贵时间处理数据的情况下加载xml并搜索文件的最佳方法是什么 下面是我加载xml文件的时间: InputStream isRaw = context.getResources().openRawResource(R.raw.xmlboo

我正在构建一个android应用程序,我有一个xml文件,它是我的数据源,我加载它以使用XPath进行查询,然后将结果加载到ListView中。当xml文件开始变大(高达10MB)时,问题就出现了。我想这意味着我的记忆力可能会有问题。我想知道在不损害设备内存或浪费宝贵时间处理数据的情况下加载xml并搜索文件的最佳方法是什么

下面是我加载xml文件的时间:

InputStream isRaw = context.getResources().openRawResource(R.raw.xmlbooksource);
_xmlBookSource = new InputSource(isRaw);
在这里,我使用XPath进行查询:

nodeResultSet = (NodeList) xpath.evaluate(xpathExpression, _xmlBookSource, XPathConstants.NODESET);

欢迎提供所有建议。

尽管它们可以用作数据源,并且可以使用XPath进行搜索;XML并不是真正为这些目的而创建的,应该仅限于在系统之间传输数据


如果您的数据源不是非常小,那么您应该认真考虑使用SQLite之类的数据库来存储和查询数据。

我也遇到了同样的问题(事实上,我遇到了一个OutOfMemory错误,XML大约为40 MiB)。除了为您的案例编写自己的优化解析器之外,没有其他解决方法。我不得不采取另一种方法,我一直在使用SAX解析器。读取xml,尽管我尝试的文件非常小。因此,我将使用更大的文件进行其他测试。我使用SAX。它不能在大约40个MiB上工作。如果你不想像我一样浪费时间:Android的XML解析器都不工作。你做了什么?正如我所说,你要么编写自己的XML解析器来绕过这些限制,要么不使用这么大的XML。我之所以选择XML文件作为DS,是因为我认为XML文件比SQlite更容易修改。在SQlite中,您被绑定到一个结构上。您的建议让我三思而后行,回到我的设计。但是现在a有了一些新的问题,所以如果你知道一些关于你的事情,欢迎你。这是