教材:快学Scala
chapter 16. XML处理 XML Processing
16.1 XML字面量
val doc = <html><head><title>Fred's Memoirs</title></head><body>...</body></html>
类型为scala.xml.Elem
,表示一个XML元素
val items = <li>Fred</li><li>Wilma</li>
类型为scala.xml.NodeSeq
,表示一系列的节点
16.2 XML节点
-
Node
类是所有XML节点类型的祖先,最重要的两个子类是Text
和Elem
-
NodeSeq
是Seq[Node]
的子类型
val elem = <a href="http://scala-lang.org">The <em>Scala</em> language</a>
elem.label // res131: String = a
elem.child // res132: Seq[scala.xml.Node] = ArrayBuffer(The , <em>Scala</em>, language)
for (e <- elem.child) println(e)
-
NodeBuffer
用于构建节点序列,是ArrayBuffer[Node]
的子类
16.3 元素属性
- 属性的键和值用
attribute
属性,产生一个MetaData
对象
val elem = <a href="http://scala-lang.org">The <em>Scala</em> language</a>
val url = elem.attribute("href") // Seq[Node]类型的Option对象 Some(http://scala-lang.org)
val url = elem.attributes("href") // Seq[Node]对象 http://scala-lang.org
val url = elem.attributes("href").text // String http://scala-lang.org
val image = <img alt="San José State University Logo"
src="http://www.sjsu.edu/publicaffairs/pics/sjsu_logo_color_web.jpg"/>
val alt = image.attribute("alt") // Some(ArrayBuffer(San Jos, é, State University Logo))
for (attr <- elem.attributes) println(attr.key, attr.value.text) // 遍历属性
16.4 内嵌表达式
<ul><li>{items(0)}</li><li>{items(1)}</li></ul>
<ul>{for (i <- items) yield <li>{i}</li>}</ul>
<img src={makeURL(fileName)}/>
<img alt={if (description == "TODO" || description == null) None else Some(Text(description))} ... />
网友评论