scala操做Xml歸納

scala對xml的支持很強大,這是你們都知道的java

下面經過網絡搜索,以及自身實踐,來體驗它到底有多麼強大!node

 
  1. object XmlTest { 
  2.   def main(args: Array[String]) { 
  3.     val xmlTag = 
  4.       <div> 
  5.         <span id="12">Hi,How are you!</span> 
  6.         <div> 
  7.           <span>I am Good!</span> 
  8.           <span></span> 
  9.         </div> 
  10.       </div> 
  11.  
  12.     println(xmlTag \ "span" \ "@id"//12 
  13.     println(xmlTag \ "span"//獲得root標籤下的span   <span id="12">Hi,How are you!</span> 
  14.     println(xmlTag \\ "span"//  <span id="12">Hi,How are you!</span><span>I am Good!</span>...  獲得全部span 
  15.  
  16.     println(xmlTag getClass)     //scala.xml.Elem 
  17.     println(xmlTag \ "span" getClass)      //scala.xml.NodeSeq$$anon$1 
  18.     println(<dd>{ xmlTag \\ "span" }</dd>)         //<dd><span id="12">Hi,How are you!</span><span>I am Good!</span><span></span></dd> 
  19.   } 

 

利用xml進行match case的網頁:http://haolloyin.blog.51cto.com/1177454/395748網絡

若果想本身串聯出一個xml則能夠用下面這樣的方式:app

 

 
  1. var nodes=new Queue[NodeSeq] 
  2. val xmlElement= xmlTag \ "span" 
  3. nodes += xmlElement 
  4. nodes += <a> </a>             //經過一個Queue,將xml的NodeSql鏈接起來 
  5. println(<di> {nodes}</di>)      //<di> <span id="12">Hi,How are you!</span><a> </a></di> 

 若是想在root標籤裏作些手腳:工具

 

 
  1. xmlTag \ "_"   //能夠去除root標籤下面的全部內容 
  2. var nodes=new Queue[NodeSeq] 
  3. nodes += xmlTag \ "_" 
  4. nodes += <a> Why </a>             //經過一個Queue,將xml的NodeSql鏈接起來 
  5. println(<div> {nodes}</div>)      //完成了在root標籤的直接子標籤尾巴添加一個tag 

按照上面的方法,就能夠利用層次結構,利用多個 \ ".."來修改xml的內容,固然隨着層數的增長,就不僅須要一個Queue了!spa

因爲我尚未發現scala有相似toElem這樣的方法,能夠將string轉換成Elem,不能利用string的replace方法來替換找到的Node,因此除了使用相似java解析xml的方式,處理變動xml內的小標籤的有效方法尚未找到,但願知道的同窗告訴下。scala

下面使用遍歷Elem的每一個node的方法來改變xml,具體解決請看下面這個完整的Objectcode

 

 
  1. import collection.mutable.Queue 
  2. import xml.{NodeSeq, Elem} 
  3.  
  4. object XmlTest { 
  5.   def main(args: Array[String]) { 
  6.     val xmlTag = 
  7.       <div> 
  8.         <span id="12">Hi,How are you!</span> 
  9.         <div> 
  10.           <span>I am Good!</span> 
  11.           <span></span> 
  12.         </div> 
  13.       </div> 
  14.  
  15.     //    println(xmlTag \ "span" \ "@id") //12 
  16.     //   println(xmlTag \ "_"  \"div")  //能夠去除root標籤下面的全部內容 
  17.     var nodes = new Queue[NodeSeq] 
  18.     val its = xmlTag.child 
  19.     for (it <- its) { 
  20.       if (it.toString != "\n        ") {    //爲何是 "\n        "呢,由於聲明的xmlTag使用工具格式化了一下,分佈在多行 
  21.         nodes += it.asInstanceOf[NodeSeq] 
  22.         if (it.attribute("id") != None && it.attribute("id").get.apply(0).text == "12"
  23.           nodes += <span>Sorry,Something is wrong</span> 
  24.       } 
  25.     } 
  26.     println(<div> 
  27.       {nodes} 
  28.     </div>) 
  29.      
  30.     //結果: 
  31.     <div> 
  32.       <span id="12">Hi,How are you!</span><span>Sorry,Something is wrong</span><div> 
  33.           <span>I am Good!</span> 
  34.           <span></span> 
  35.         </div> 
  36.        
  37.     </div> 
  38.  
  39.   } 

至於還有一個遍歷NodeSeq的方式,就不具體附代碼了,應該是大同小異,參見scala的xml包了。xml

本文出自 「沐浴心情」 博客,請務必保留此出處http://lj3331.blog.51cto.com/5679179/1020702blog

相關文章
相關標籤/搜索