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)