java - 在 Java 或 Scala 中解析扁平的、大量属性的 xml 的最快方法

标签 java performance scala xml-parsing

如果我有一个像下面这样的大 xml 文件。在 Java 或 Scala 中解析它的最快方法是什么。流式传输单个元素很重要但不是绝对必要

我感兴趣的是从每个结果对象中获取属性值。

<Response>
    <Result att1="1", att2="2", att3="3", att4="4", att5="5"/>
    <Result att1="1", att2="2", att3="3", att4="4", att5="5"/>
    <Result att1="1", att2="2", att3="3", att4="4", att5="5"/>
    <Result att1="1", att2="2", att3="3", att4="4", att5="5"/>
</Response>

最佳答案

如果您的文件很大并且您不想将整个文件加载到内存中(即 DOM),那么您可以采用的一种方法是拉式解析路线。如果你想在 scala 中进行拉式解析,寻找“开始元素”事件以检查属性,那么你可以这样做:

import scala.io.Source
import java.io.File
import scala.xml.pull.XMLEventReader
import scala.xml.pull.EvElemStart

val src = Source.fromFile(new File(pathToXml))
val reader = new XMLEventReader(src)
reader foreach{ 
  case EvElemStart(_, _, attrs, _) =>
    //do something here

  case _ =>
}

遵循这种方法应该确保您的文件不会被读入内存并且应该很快。

关于java - 在 Java 或 Scala 中解析扁平的、大量属性的 xml 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188769/

相关文章:

ruby-on-rails - 一旦我的应用程序爬升到 > 1000 个对象,Sunspot-Solr 就会慢下来 [包括 Solr 日志]

performance - 如何测量 F# 代码的 CPU 和内存使用情况?

arrays - Array.isDefinedAt 用于 scala 中的 n 维数组

java - 在 Java 中提取长度超过 64 个字符的 IPTC 关键字

java - JUnit 测试未能测试 system.out.println 结果

C# 线程安全的 getter 性能差异

scala - 为 Spark 序列化 Scalaz 订单

scala - 实现策略模式的函数式方法

java - 使用 Multi-Tenancy 对 Grails 域类进行单元测试

java - TableModel - 图形用户界面中没有显示任何内容?