117、Scala编程进阶之XML实战详解

scala中定义xml

scala对xml有很好的支持,可以直接在scala代码中定义一个xml文档元素

val books = <books><book>my first scala book</book></books>

此时doc的类型是scala.xml.Elem,也就是一个xml元素

scala还可以直接定义多个同级别的xml元素

val books = <book>my first scala book</book><book>my first spark book</book>

此时doc的类型是scala.xml.NodeBuffer,也就是一个xml节点序列

XML节点类型

Node类是所有XML节点类型的父类型,两个重要的子类型是Text和Elem。
Elem表示一个XML元素,也就是一个XML节点。
scala.xml.Elem类型的label属性,返回的是标签名
scala.xml.Elem类型child属性,返回的是子元素,scala.xml.NodeSeq类型,是一个元素序列,可以用for循环,直接遍历它。
可以通过scala.xml.NodeBuffer类型,来手动创建一个节点序列

val booksBuffer = new scala.xml.NodeBuffer
booksBuffer += <book>book1</book>
booksBuffer += <book>book2</book>
val books: scala.xml.NodeSeq = booksBuffer

xml元素的属性

scala.xml.Elem.attributes属性,可以返回这儿xml元素的属性,是Seq[scala.xml.Node]类型的,继续调用text属性,可以拿到属性的值

val book = <book id=“1” price=“10.0”>book1</book>
val bookId = book.attributes(“id”).text

还可以遍历属性

for(attr <- book.attributes) println(attr)

还可以调用book.attributes.asAttrMap,获取一个属性Map

在xml中嵌入scala代码

val books = Array("book1", "book2")
<books><book>{ books(0) }</book><book>{ books(1) }</book></books>
<books>{ for (book <- books) yield <book>{book}</book> }</books>

还可以在xml属性中嵌入scala代码

<book id={ books(0) }>{ books(0) }</book>

修改xml元素

默认情况下,scala中的xml表达式是不可改变的;如果要修改xml元素的话,必须拷贝一份再修改

val books = <books><book>book1</book></books>

添加一个子元素

val booksCopy = books.copy(child = books.child ++ <book>book2</book>)

val book = <book id="1">book1</book>

import scala.xml._

修改一个属性

val bookCopy = book % Attribute(null, "id", "2", Null)

添加一个属性

val bookCopy = book % Attribute(null, "id", "2", Attribute(null, "price", "10.0", Null))

加载和写入外部xml文件

import scala.xml._
import java.io._

使用scala的XML类加载

val books = XML.loadFile("C://Users//Administrator//Desktop//books.xml")

使用Java的FileInputStream类加载

val books = XML.load(new FileInputStream("C://Users//Administrator//Desktop//books.xml"))

使用Java的InputStreamReader类指定加载编码

val books = XML.load(new InputStreamReader(new FileInputStream("C://Users//Administrator//Desktop//books.xml"), "UTF-8"))

将内存中的xml对象,写入外部xml文档

XML.save("C://Users//Administrator//Desktop//books2.xml", books)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值