在Java或Scala中解析平坦,属性重的xml的最快方法

use*_*128 1 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>
Run Code Online (Sandbox Code Playgroud)

cmb*_*ter 7

如果您的文件很大并且您不想将整个内容加载到内存(即DOM)中,那么您可以采用的一个路径是拉解析路径.如果你想在scala中进行pull解析,寻找"start element"事件以检查属性,那么你可以这样做:

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 _ =>
}
Run Code Online (Sandbox Code Playgroud)

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