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