Как анализировать XML-документ как поток с помощью Scala?

Как проанализировать XML-документ как поток с помощью Scala? Я использовал API-интерфейс Stax в java для этого, но я хотел бы знать, есть ли способ "scala".

Ответ 1

Используйте пакет scala.xml.pull. Фрагмент, взятый из Scaladoc для Scala 2.8:

import scala.xml.pull._
import scala.io.Source
object reader {
  val src = Source.fromString("<hello><world/></hello>")
  val er = new XMLEventReader(src)
  def main(args: Array[String]) {
    while (er.hasNext)
      Console.println(er.next)
  }
}

Вы можете вызвать toIterator или toStream на er, чтобы получить true Iterator или Stream.

И вот версия 2.7, которая немного отличается. Однако тестирование, похоже, указывает на то, что оно не обнаруживает конец потока, в отличие от Scala 2.8.

import scala.xml.pull._
import scala.io.Source

object reader {
  val src = Source.fromString("<hello><world/></hello>")
  val er = new XMLEventReader().initialize(src)

  def main(args: Array[String]) {
    while (er.hasNext)
      Console.println(er.next)
  }
}

Ответ 2

scala.xml.XML.loadFile(fileName: String)
scala.xml.XML.load(url: URL)
scala.xml.XML.load(reader: Reader)
scala.xml.XML.load(stream: InputStream)

Есть другие...