gpt4 book ai didi

java - 如何限制 XPath 的范围

转载 作者:行者123 更新时间:2023-11-30 03:20:50 24 4
gpt4 key购买 nike

我需要在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com