2010-05-25 59 views
13

如何使用Scala將xml文檔解析爲流? 我已經在java中使用了Stax API來實現這一點,但我想知道是否有一個「scala」方法來做到這一點。如何使用Scala將xml文檔解析爲流?

+0

有沒有人知道比解析「hello world」更復雜/完整的例子? – ScArcher2 2010-05-26 21:56:15

+0

我知道這件事,因爲我曾與之交談的人正在使用它。你想做什麼,你有什麼問題?詢問更多問題。這將使下一個想要使用它的人更容易。 :-) – 2010-05-26 23:48:42

回答

24

使用包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) 
    } 
} 

您可以撥打toIteratortoStreamer得到真正IteratorStream

這裏是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) 
    } 
} 
+0

我不得不將我的代碼更改爲val er = new XMLEventReader()。initialize(src),但它看起來像在工作。謝謝! – ScArcher2 2010-05-26 21:03:30

+0

2.7 xml.pull是野蠻的borked,應該完全避免所有,但非常勇敢。 2.8情況大大改善。 – 2010-05-29 00:17:51

+0

即使現在scala.xml.pull仍然不是很好,我建議不要使用它:https://github.com/scala/scala-xml/issues/193 – 2018-02-27 02:22:25

-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

這不會將整個文檔加載到內存中嗎?我想分析它,並在我收到它時處理它,而不是先將整個文檔存儲在內存中。 – ScArcher2 2010-05-25 22:01:04

+1

@ ScArcher2:是的,這些不是流API。 – 2010-05-26 04:33:53