scala操作Xml概括

scala对xml的支持很强大,这是大家都知道的

下面通过网络搜索,以及自身实践,来体验它到底有多么强大!


  
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则可以用下面这样的方式:

 


  
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了!

由于我还没有发现scala有类似toElem这样的方法,可以将string转换成Elem,不能利用string的replace方法来替换找到的Node,所以除了使用类似java解析xml的方式,处理变更xml内的小标签的有效方法还没有找到,希望知道的同学告诉下。

下面使用遍历Elem的每个node的方法来改变xml,具体解决请看下面这个完整的Object

 


  
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包了。

本文出自 “沐浴心情” 博客,请务必保留此出处http://lj3331.blog.51cto.com/5679179/1020702

转载于:https://my.oschina.net/u/2315939/blog/548107

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值