当前位置: 首页 > 面试题库 >

用Java解析非常大的XML文档(还有更多)

刘瀚
2023-03-14
问题内容

(以下所有内容都将用Java编写)

我必须构建一个应用程序,它将可能非常大的XML文档作为输入。该文档被加密-不使用XMLsec加密,而是使用我的客户预先存在的加密算法-将分三个阶段处理:

首先,将根据上述算法对流进行解密。

其次,扩展类(由第三方提供给我提供的API编写)将读取文件的某些部分。读取的数量是不可预测的-特别是不能保证它在文件的头中,但是可能在XML的任何位置发生。

最后,另一个扩展类(同样)将输入XML细分为1..n个子集文档。这些可能在某种程度上与第二种操作处理的文档部分重叠,即:我相信我将需要倒带处理该对象所用的任何机制。

这是我的问题:

有没有一种方法可以一次不将整个数据读入内存?显然,我可以将解密实现为输入流过滤器,但是我不确定是否可以按照我所描述的方式解析XML。通过遍历需要收集尽可能多的文档以收集第二步的信息,然后通过倒退文档并再次传递以将其拆分为作业,理想地释放文档中所有不再使用的部分他们已经通过了。


问题答案:

Stax是正确的方法。我建议看伍德斯托克斯



 类似资料:
  • 问题内容: 我有以下问题: 我有一个XML文件(大约1GB),并且必须上下迭代(即不连续;一个接一个),以便获取所需的数据并对其进行一些操作。最初,我使用了DOM Java包,但是很显然,在解析XML文件时,JVM达到了其最大堆空间并停止了运行。 为了解决这个问题,我想到的解决方案之一是找到另一个解析器,该解析器迭代XML中的每个元素,然后将其内容存储在硬盘上的临时SQLite数据库中。因此,通过

  • 主要内容:Java DOM4J解析器 解析XML文档的步骤,Java DOM4J解析器 解析XML文档的示例Java DOM4J解析器 解析XML文档的步骤 以下是使用 DOM4J Parser 解析文档时使用的步骤。 导入与 XML 相关的包。 创建一个 SAXReader。 从文件或流创建文档。 通过调用 document.selectNodes() 使用 XPath 表达式获取所需的节点 提取根元素。 迭代节点列表。 检查属性。 检查子元素。 导入 XML 相关的包 创建一个文档生成器 从

  • 主要内容:Java XPath解析器 解析XML文档的步骤,Java XPath解析器 解析XML文档的示例Java XPath解析器 解析XML文档的步骤 以下是使用 XPath Parser 解析文档时使用的步骤。 导入与 XML 相关的包。 创建一个文档生成器。 从文件或流创建文档。 创建一个 Xpath 对象和一个 XPath 路径表达式。 使用XPath.compile()编译 XPath 表达式,并通过XPath.evaluate()评估编译的表达式来获取节点列表。 迭代节点列表。

  • 主要内容:Java StAX解析器 解析XML文档的示例Java StAX解析器 解析XML文档的示例 需要解析的文件input.xml 编写Java StAX解析器 解析XML文档的程序 输出结果为:

  • 主要内容:Java JDOM解析器 解析XML文档的步骤,Java JDOM解析器 解析XML文档的示例Java JDOM解析器 解析XML文档的步骤 以下是使用 JDOM解析器 解析文档时使用的步骤。 导入与 XML 相关的包。 创建一个文档生成器。 从文件或流创建文档 提取根元素 检查属性 检查子元素 导入 XML 相关的包 创建一个文档生成器 从文件或流创建文档 提取根元素 检查属性 检查子元素 Java JDOM解析器 解析XML文档的示例 input.xml文件: JDomParser

  • 主要内容:Java SAX解析器 解析XML文档的示例Java SAX解析器 解析XML文档的示例 需要解析的文件input.xml 编写DefaultHandler的事件处理程序 编写核心解析处理类 输出结果为: