scala對xml的支持很強大,這是你們都知道的java
下面經過網絡搜索,以及自身實踐,來體驗它到底有多麼強大!node
- object XmlTest {
- def main(args: Array[String]) {
- val xmlTag =
- <div>
- <span id="12">Hi,How are you!</span>
- <div>
- <span>I am Good!</span>
- <span></span>
- </div>
- </div>
- println(xmlTag \ "span" \ "@id") //12
- println(xmlTag \ "span") //獲得root標籤下的span <span id="12">Hi,How are you!</span>
- println(xmlTag \\ "span") // <span id="12">Hi,How are you!</span><span>I am Good!</span>... 獲得全部span
- println(xmlTag getClass) //scala.xml.Elem
- println(xmlTag \ "span" getClass) //scala.xml.NodeSeq$$anon$1
- println(<dd>{ xmlTag \\ "span" }</dd>) //<dd><span id="12">Hi,How are you!</span><span>I am Good!</span><span></span></dd>
- }
- }
利用xml進行match case的網頁:http://haolloyin.blog.51cto.com/1177454/395748網絡
若果想本身串聯出一個xml則能夠用下面這樣的方式:app
- var nodes=new Queue[NodeSeq]
- val xmlElement= xmlTag \ "span"
- nodes += xmlElement
- nodes += <a> </a> //經過一個Queue,將xml的NodeSql鏈接起來
- println(<di> {nodes}</di>) //<di> <span id="12">Hi,How are you!</span><a> </a></di>
若是想在root標籤裏作些手腳:工具
- xmlTag \ "_" //能夠去除root標籤下面的全部內容
- var nodes=new Queue[NodeSeq]
- nodes += xmlTag \ "_"
- nodes += <a> Why </a> //經過一個Queue,將xml的NodeSql鏈接起來
- println(<div> {nodes}</div>) //完成了在root標籤的直接子標籤尾巴添加一個tag
按照上面的方法,就能夠利用層次結構,利用多個 \ ".."來修改xml的內容,固然隨着層數的增長,就不僅須要一個Queue了!spa
因爲我尚未發現scala有相似toElem這樣的方法,能夠將string轉換成Elem,不能利用string的replace方法來替換找到的Node,因此除了使用相似java解析xml的方式,處理變動xml內的小標籤的有效方法尚未找到,但願知道的同窗告訴下。scala
下面使用遍歷Elem的每一個node的方法來改變xml,具體解決請看下面這個完整的Objectcode
- import collection.mutable.Queue
- import xml.{NodeSeq, Elem}
- object XmlTest {
- def main(args: Array[String]) {
- val xmlTag =
- <div>
- <span id="12">Hi,How are you!</span>
- <div>
- <span>I am Good!</span>
- <span></span>
- </div>
- </div>
- // println(xmlTag \ "span" \ "@id") //12
- // println(xmlTag \ "_" \"div") //能夠去除root標籤下面的全部內容
- var nodes = new Queue[NodeSeq]
- val its = xmlTag.child
- for (it <- its) {
- if (it.toString != "\n ") { //爲何是 "\n "呢,由於聲明的xmlTag使用工具格式化了一下,分佈在多行
- nodes += it.asInstanceOf[NodeSeq]
- if (it.attribute("id") != None && it.attribute("id").get.apply(0).text == "12")
- nodes += <span>Sorry,Something is wrong</span>
- }
- }
- println(<div>
- {nodes}
- </div>)
- //結果:
- <div>
- <span id="12">Hi,How are you!</span><span>Sorry,Something is wrong</span><div>
- <span>I am Good!</span>
- <span></span>
- </div>
- </div>
- }
- }
至於還有一個遍歷NodeSeq的方式,就不具體附代碼了,應該是大同小異,參見scala的xml包了。xml
本文出自 「沐浴心情」 博客,請務必保留此出處http://lj3331.blog.51cto.com/5679179/1020702blog