2010-05-25 15 views
13

Scala'yı kullanarak bir xml belgesini akış olarak nasıl ayrıştırırım? Bunu gerçekleştirmek için Stax API'sini java'da kullandım, ancak bunu yapmak için bir "scala" yolu olup olmadığını bilmek istiyorum.Scala'yı kullanarak bir xml belgesini akış olarak nasıl ayrıştırırım?

+0

Herkes "merhaba dünya" ayrıştırmaktan daha karmaşık/tam bir örnek biliyor mu? – ScArcher2

+0

Bu şeyi biliyordum çünkü bir zamanlar konuştuğum biri kullanıyordu. Ne yapmaya çalışıyorsun ve onunla ne gibi sorunlar yaşıyorsun? Daha fazla soru sor. Bir sonraki kişinin onu kullanmak istemesini kolaylaştırır. :-) –

cevap

24

Kullanım paket scala.xml.pull ... başkaları da var. Scala 2.8 için Scaladoc alınan snippet'ine: Sen gerçek Iterator veya Stream bir olsun er üzerine toIterator veya toStream çağırabilir

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

.

Ve biraz farklı olan 2.7 sürümü var. Ancak, test Scala 2.8'den farklı olarak akışın sonunu tespit etmediğini gösteriyor gibi görünüyor.

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

Kodumu val er = new XMLEventReader(). Initialize (src) olarak değiştirmem gerekiyordu, ancak çalışıyor gibi görünüyor. Teşekkürler! – ScArcher2

+0

2.7 xml.pull vahşice vaftiz edilmiş ve tamamen cesurca ama hepsi tarafından kaçınılmalıdır. 2.8 durum çok gelişti. –

+0

scala.xml.pull, şu anda bile hala harika değil; Bunu kullanımdan kaldırmayı önerdim: 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) 

+4

Tüm belgeyi belleğe yüklemez mi? Onu ayrıştırmak ve onu aldığım gibi ele alıp tüm belgeyi önce bellekte saklamak istemiyorum. – ScArcher2

+1

@ ScArcher2: Evet, bunlar akış API'leri değil. –

İlgili konular