2013-05-11 25 views
1

Scala代碼:如何從字符串加載NodeSeq?

val str = "<a>11</a><b>22</b>" 
XML.loadString(str) 

它會報告(當然)一個例外:

org.xml.sax.SAXParseException: 
The markup in the document following the root element must be well-formed. 

是否有可能加載從字符串NodeSeq?

回答

5

Scala的解析器不會喜歡你的例子字符串

val str2="<xml><a>11</a><b>22</b></xml>" 

作品就好了,我想你的例子不能算作一個完整的文檔

要獲得元素「內」在<xml>..</xml>做到這一點

val n = xml.XML.loadString(str2) 
val list = n.child 

它返回一個列表

scala> n.child 
res12: Seq[scala.xml.Node] = List(<a>11</a>, <b>22</b>) 
+0

如果我添加一個根節點,它會工作,但我必須手動刪除根。 – Freewind 2013-05-11 10:49:32

+0

我已經添加了一個方法來刪除「根」,只是有兩個片段作爲列表元素。希望這有助於 – Vorsprung 2013-05-11 13:10:29

+0

謝謝,這可能是唯一的解決方案 – Freewind 2013-05-11 15:11:15

0

爲了補充Vorsprung的回答,實際原因爲什麼XML.loadString輸入<a>11</a><b>22</b>失敗正是異常告訴你(重點煤礦):

以下根元素必須在文檔中的標記是 良構

一個的well-formed XML文檔的要求是它包含恰好一個根元素

因此,例如這工作得很好,並給你一個NodeSeq(一Elem更精確地說):

XML.loadString("<c><a>11</a><b>22</b></c>")