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

使用StAX和XPath读取巨大的XML文件

米修平
2023-03-14
问题内容

输入文件包含数千个XML格式的事务,大小约为10GB。要求是根据用户输入选择每个事务XML,并将其发送到处理系统。

文件的样本内容

<transactions>
    <txn id="1">
      <name> product 1</name>
      <price>29.99</price>
    </txn>

    <txn id="2">
      <name> product 2</name>
      <price>59.59</price>
    </txn>
</transactions>

希望(技术)用户提供输入标签名称,例如<txn>

我们希望提供更通用的解决方案。文件内容可能会有所不同,用户可以使用XPath表达式(例如“ //transactions/txn”)来选择单个事务。

这里我们需要考虑的技术问题很少

  • 该文件可以位于共享位置或FTP
  • 由于文件很大,因此我们无法在JVM中加载整个文件

我们可以在这种情况下使用StAX解析器吗? 它必须将XPath表达式作为输入,并选择/选择事务XML。

寻找建议。提前致谢。


问题答案:

Stax和xpath是非常不同的东西。Stax允许您仅以正向解析流XML文档。Xpath允许双向解析。Stax是一个非常快速的流式XML解析器,但是,如果您需要xpath,则Java为此提供了一个单独的库。

看一下这个问题,进行非常类似的讨论:SAX模型是否有XPath处理器?



 类似资料:
  • 问题内容: 我需要阅读几个大(200Mb-500Mb)XML文件,所以我想使用StaX。我的系统有两个模块- 一个用于读取文件(使用StaX);另一个用于读取文件。另一个模块(“解析器”模块)假定获取该XML的单个条目并使用DOM对其进行解析。我的XML文件没有特定的结构-因此我无法使用JaxB。如何向“解析器”模块传递要解析的特定条目?例如: 我想使用StaX来解析该文件-但是每个“项目”条目都

  • 问题内容: 我第一次使用stax解析XML字符串。我找到了一些示例,但无法使我的代码正常工作。这是我的代码的最新版本: 我将手表放在“事件”和“ reader.getElementText()”上。当代码停止时 将显示“ reader.getElementText()”值,但是一旦它偏离该行,就无法评估。当代码停止时: “元素”手表显示正确的值。最后,当我又将代码步进一行时,我捕获了此异常: 我尝

  • 问题内容: 我目前正在尝试从Python 2.7中的.csv文件中读取数据,该文件最多包含100万行和200列(文件范围从100mb到1.6gb)。对于少于300,000行的文件,我可以(非常缓慢地)执行此操作,但是一旦超过该行,就会出现内存错误。我的代码如下所示: 在getstuff函数中使用else子句的原因是,所有符合条件的元素都将一起列在csv文件中,因此当我经过它们时,为了节省时间,我离

  • 为了在巨大的xml文件中执行XPATH查询,我阅读了许多喜欢VTD-xml的文章,因此我复制了这些文章中的代码: 但当我运行它时没有结果,所以这意味着XML文件没有映射到内存中。。。我的问题是如何在VTD-xml中强制映射xml文件?

  • 问题内容: 我目前正在尝试从Python 2.7中的.csv文件中读取数据,该文件最多包含100万行和200列(文件范围从100mb到1.6gb)。对于少于300,000行的文件,我可以(非常缓慢地)执行此操作,但是一旦超过该行,就会出现内存错误。我的代码如下所示: 在getstuff函数中使用else子句的原因是,所有符合条件的元素都将一起列在csv文件中,因此,经过它们以节省时间时,我离开了循

  • 我需要做以下工作 1) 复制一个巨大的excel文件1400*1400并复制一份。 2)读取复制的文件并添加新的列和行,并同时进行编辑。 3) 这将是一个独立的程序,而不是在服务器上。我有低内存占用和快速性能的限制。 我做了一些阅读,发现以下内容 1)没有 API 可以复制一个巨大的文件 2)SXSSF可以用于写,但不能用于读 3)XSSF和SAX(事件API)可以用于读取,但不能用于editin