编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

xml

Scala中xml基础操作

scala中定义xml

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

val books = my first scala book

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

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

val books = my first scala bookmy first spark book

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

XML节点类型

  • Node类是所有XML节点类型的父类型,两个重要的子类型是Text和Elem。

  • Elem表示一个XML元素,也就是一个XML节点。scala.xml.Elem类型的label属性,返回的是标签名,child属性,返回的是子元素。

  • scala.xml.NodeSeq类型,是一个元素序列,可以用for循环,直接遍历它。

  • 可以通过scala.xml.NodeBuffer类型,来手动创建一个节点序列

val booksBuffer = new scala.xml.NodeBuffer
booksBuffer += book1booksBuffer += book2val books: scala.xml.NodeSeq = booksBuffer

xml元素的属性

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

val book = book1val bookId = book.attributes(“id”).text
  • 还可以遍历属性

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

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

在xml中嵌入scala代码

在xml中嵌入scala代码

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

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

{ books(0) }

修改xml元素

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

import scala.xml._
val books = book1

添加一个子元素

val booksCopy = books.copy(child = books.child ++ book2)
val book = book1

修改一个属性

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

添加一个属性

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

xml 加载和写入外部xml文件

使用scala的XML类加载

import scala.xml._
import java.io._
val books = XML.loadFile("books.xml")

使用Java的FileInputStream类加载

val books = XML.load(new FileInputStream("books.xml"))

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

val books = XML.load(new InputStreamReader(new FileInputStream("books.xml"), "UTF-8"))

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

XML.save("books2.xml", books)
未经允许不得转载: xml