《Programming in Scala 3rd》阅读笔记

Chapter 28《Working with XML》

2018-08-20  本文已影响0人  liqing151

半结构化数据

XML简介

XML字面量

其中<,>$会被转义成为对应的字符实体。如果使用单纯的字符串拼接,则无法阻止用户对XML的修改,会造成错误的情况发生。

scala> "<a>" + "</a>potential security hole<a>" + "</a>"
res5: String = <a></a>potential security hole<a></a>

所以最好还是使用XML字面量来生成XML Elem

序列化

拆分XML

同样可以使用这两个方法来提取属性

scala> val joe = <employee name="Joe" rank="code monkey" serial="123"/>
joe: scala.xml.Elem = <employee name="Joe" rank="code monkey" serial="123"/>
scala> joe \\ "@name"
res15: scala.xml.NodeSeq = Joe

"@name"是在被提取的字符串里面的。

反序列化

加载和保存

XML中的模式匹配

其中ab只能匹配只有一个节点的XML,例如<a>apple</a><b><c/></b>此类可以,标签中间只能有一个节点,不能有多的节点。<a>scala<b/></a>这样是不行的。如果要使提取出来这种XML序列,使用_*进行匹配,可以使用变量绑定,将_*的值赋值到contents上方便以后使用。

def proc(node: scala.xml.Node): String =
node match {
case <a>{contents @ _*}</a> => "It's an a: " + contents
case <b>{contents @ _*}</b> => "It's a b: " + contents
case _ => "It's something else."
}

XML中,换行或者空格等空白字符也都是一个节点,

上一篇 下一篇

猜你喜欢

热点阅读