Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过StAX解析Scala中的XML_Xml_Scala_Stax - Fatal编程技术网

通过StAX解析Scala中的XML

通过StAX解析Scala中的XML,xml,scala,stax,Xml,Scala,Stax,使用Scala和StAX解析器解析大型XML文件的最佳方法是什么 格式是非递归的 <items> <item> <field1>Value</field1> . . . <fieldN></fieldN> </item> </items> 使用固定的标记列表解析文件的最佳方法是什么,但这些标记都是可选的。填充一些对象(案例类)?或者填充映射,然后将其解析

使用Scala和StAX解析器解析大型XML文件的最佳方法是什么

格式是非递归的

<items>
  <item>
      <field1>Value</field1>
      . . .
      <fieldN></fieldN>
  </item>
</items> 
使用固定的标记列表解析文件的最佳方法是什么,但这些标记都是可选的。填充一些对象(案例类)?或者填充映射,然后将其解析为对象

val path = new URL( . . . )

val inputFactory = XMLInputFactory.newInstance()
val reader = inputFactory.createXMLEventReader(path.openStream())

var items = ??? SOME MUTABLE COLLECTION?
var currentItem = ??? NULL?

try {
  while (reader.hasNext) {
    val event = reader.nextEvent()

    if (event.isStartElement) {
      event.asStartElement.getName.toString match {
        case "item" =>
          ??? create new instance of some Item object?
          ??? put raw data into Map[String, String]?

        case "field1" =>
          ??? currentItem.field1 = Some(reader.getElementText)
          ??? fieldsCollection("field1") = reader.getElementText

        . . . 

        (or) case field =>
            fieldsCollection(field) = reader.getElementText

      }
    }

    if (event.isEndElement) {
      event.asEndElement.getName.toString match {
        case "item" =>
           ??? Put $currentItem into mutable collection?
           ??? Parse object from Map?
        case _ =>
      }
    }

  }
} catch {
  case e: XMLStreamException => throw e
} finally {
  reader.close()
}