1

我需要在 Android 上解析相对较大的 XML 文件。

一些节点内部结构包含 HTML 标签,对于其他一些节点,我需要从不同的深度级别提取内容。因此,我计划不使用 XmlPullParser,而是:

  • 使用 XPath,找到合适的节点
  • 使用“getElementsByTagName”找到合适的子节点
  • 提取信息并将其保存在我的自定义数据对象中。

我遇到的问题是性能。我打开文件的方式如下:

        File file = new File(_path);
        FileInputStream is = new FileInputStream(file);

        XPath xPath = XPathFactory.newInstance().newXPath();
        NamespaceContext context = new NamespaceContextMap("def", __URL__);
        xPath.setNamespaceContext(context);

        Object objs = xPath.evaluate("/def:ROOT_ELEMENT/*,
            new InputSource(is), XPathConstants.NODESET);

尽管我需要获取 XML 文件开头的几个字符串,但看起来 XPath 解析了整个 xml 文件并将其放入 DOM 结构中。

在某些情况下,我需要访问完整对象,并且可以为几兆字节的文件运行几秒钟的操作。

在其他情况下 - 我只需要获取几个节点并且不希望用户等待我的程序执行冗余解析。

Q1:有什么方法可以得到XML文件的某些部分而不完整解析它?

Q2:有什么方法可以限制 XPath 扫描/解析整个 XML 文件?例如:扫描到第二级深度?

谢谢你。

PS 在一种特殊情况下,XML 文件代表 FB2 文件格式,如果您有任何具体的提示可以解决我的 fb2 文件解析问题,请随意填写以添加其他评论。

4

1 回答 1

1

我不太了解可用于 android 的 XML 工具集,只是知道它非常有限!

解决此要求的最佳方法可能是编写一个流式 SAX 过滤器,它查找您感兴趣的文档部分,并构建一个仅包含这些部分的 DOM,然后您可以使用 XPath 对其进行查询。我有点不愿意建议,因为如果你以前没有做过这样的事情,这并不容易,但它似乎是正确的方法。

于 2013-10-04T07:07:54.140 回答