我需要在 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 文件解析问题,请随意填写以添加其他评论。