2010-05-25 7 views
13

Come analizzare un documento XML come uno stream utilizzando Scala? Ho usato l'API Stax in java per realizzare questo, ma mi piacerebbe sapere se c'è un modo "scala" per farlo.Come si analizza un documento XML come uno stream utilizzando Scala?

+0

Qualcuno sa di un esempio più complesso/completo di parsing "ciao mondo"? – ScArcher2

+0

Sapevo di questa cosa perché qualcuno con cui ho parlato una volta lo stava usando. Cosa stai cercando di fare e quali problemi hai con questo? Fai più domande. Renderà più facile per la prossima persona che vuole usarlo. :-) –

risposta

24

usare il pacchetto scala.xml.pull. Snippet preso dal scaladoc per 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) 
    } 
} 

È possibile chiamare toIterator o toStream su er per ottenere un vero e proprio Iterator o Stream.

Ed ecco la versione 2.7, che è leggermente diversa. Tuttavia, il test sembra indicare che non rileva la fine del flusso, a differenza di 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

Ho dovuto cambiare il mio codice in valer = new XMLEventReader(). Initialize (src), ma sembra che funzioni. Grazie! – ScArcher2

+0

il 2.7 xml.pull è selvaggiamente puntinato e dovrebbe essere evitato interamente da tutti tranne i molto coraggiosi. 2.8 situazione è molto migliorata. –

+0

scala.xml.pull non è ancora molto bello anche adesso; Ho proposto di deprecarlo: 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) 

ce ne sono altri ...

+4

Non caricherà l'intero documento in memoria? Mi piacerebbe analizzarlo e gestirlo come lo ricevo e non memorizzare l'intero documento in memoria prima. – ScArcher2

+1

@ ScArcher2: Sì, quelle non sono API di streaming. –

Problemi correlati