2010-05-25 6 views
13

¿Cómo puedo analizar un documento xml como una secuencia usando Scala? He utilizado la API Stax en Java para lograr esto, pero me gustaría saber si hay una forma de "scala" para hacer esto.¿Cómo analizo un documento xml como una secuencia usando Scala?

+0

¿Alguien sabe de un ejemplo más complejo/completo que el análisis "hello world"? – ScArcher2

+0

Sabía de esto porque alguien con quien una vez hablé estaba usándolo. ¿Qué estás tratando de hacer, y qué problemas tienes con eso? Haga más preguntas. Lo hará más fácil para la próxima persona que quiera usarlo. :-) –

Respuesta

24

Uso paquete scala.xml.pull. Fragmento tomado de la Scaladoc de 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) 
    } 
} 

Puede llamar toIterator o toStream en er para conseguir una verdadera Iterator o Stream.

Y aquí está la versión 2.7, que es ligeramente diferente. Sin embargo, la prueba parece indicar que no detecta el final de la secuencia, a diferencia de 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) 
    } 
} 
+0

Tuve que cambiar mi código a val er = new XMLEventReader(). Initialize (src), pero parece que está funcionando. ¡Gracias! – ScArcher2

+0

el 2.7 xml.pull está salvajemente borracho y debe evitarse por completo, excepto por los muy valientes. 2.8 situación es mucho mejor. –

+0

scala.xml.pull todavía no es genial incluso ahora; Propuse desaprobarlo: https://github.com/scala/scala-xml/issues/193 –

-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) 

hay otros ...

+4

¿No cargará todo el documento en la memoria? Me gustaría analizarlo y manejarlo cuando lo reciba y no almacenar todo el documento en la memoria primero. – ScArcher2

+1

@ ScArcher2: Sí, no son API de transmisión. –

Cuestiones relacionadas