本节主要内容
- XML 字面量
- XML内容提取
- XML对象序列化及反序列化
- XML文件读取与保存
- XML模式匹配
1. XML 字面量
XML是一种非常重要的半结构化数据表示方式,目前大量的应用依赖于XML,这些应用或利用XML作为数据交换格式,或利用XML进行文件配置等。像JAVA、C++及其它流行的程序开发语言都是依赖于第三方库来实现XML的操作,例如JAVA经常通过JDOM,DOM4J等XML处理工具进行XML的操纵,但Scala提供了对XML的原生支持,通过scala.xml._包下的类或对象可以进行任何的XML操作。下面的代码演示了Scala中如何定义XML字面量。
scala> var x: scala.xml.Elem = <site><name>xuetuwuyou</name><url>http://www.xuet
uwuyou.com/</url></site>
x: scala.xml.Elem = <site><name>xuetuwuyou</name><url>http://www.xuetuwuyou.com/
</url></site>
scala> <site><name>xuetuwuyou</name><url>http://www.xuetuwuyou.com/</url></site>
res8: scala.xml.Elem = <site><name>xuetuwuyou</name><url>http://www.xuetuwuyou.c
om/</url></site>
通过上面的代码不能发现,scala会自动地对XML进行解析,并识别为scala.xml.Elem类型。scala中与XML相关的包和类很多,具体如下图所示:
在深入讲解Scala操纵XML之前,先对几个主要的术语进行介绍:
图中描述了属性、根元素、子元素、元素及文本的概念及它们之间的关联关系,所以的文本、元素被统称为节点(Node)。下面给出的scala XML中的几个重要的类:
- Node类。它的一个抽象类,用于对象XML中的所有节点进行抽象:
- Text类,仅包含文本的节点,例如
<url>http://www.xuetuwuyou.com/</url>
中的http://www.xuetuwuyou.com/就是一种Text对象 - NodeSeq类,它同样是一个抽象类,指的是节点的序列,Node继承自NodeSeq,可以看Node可作是NodeSeq只有一个元素的情况。
scala中的XML中可以执行scala表达式,例如
val s="http://www.xuetuwuyou.com/"
val xmlUrl= <a>{
" "+s+" "}</a>
//<a> http://www.xuetuwuyou.com/ </a>
println(xmlUrl)
val age=30
val xml1= if(age<29) <age> {age} </age> else NodeSeq.Empty
//<age> 28 </age
println(xml1)
//<age> 79 </age>
val xml2= <age> {
29+50} </age>
println(xml2)