java - 如何限制 XPath 的范围

标签 java android xpath xmlpullparser

我需要在 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 文件吗?例如:扫描到第 2 级深度?

谢谢。

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

最佳答案

我对可用于 android 的 XML 工具集知之甚少,只知道它非常有限!

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

关于java - 如何限制 XPath 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19170205/

相关文章:

java - 哈希表帮助-使用字符串

java - 读入文本文件传递给对象数组 Java

java - 我可以在 Android 上使用 jmonkeyengine 吗?

android - 在 Android 中依赖 GitHub 依赖

xml - 使用 VBA 和 xPath 遍历 XML 文件

xml - 按 Xsl 中子项的值对 xml 节点进行分组

java - 包含多个类的 Java 源代码的名称应该是什么?

java - org.h2.jdbc.JdbcSQLException : Column count does not match when it does

java - 如何强制类的用户在 Android 中的 UI 线程之外使用它?

function - 确定 XQuery 中出现的频率