《快學Scala》學習筆記 第16章 XML處理

2021-08-22 10:27:42 字數 3517 閱讀 2086

這是一篇《快學scala》的讀書筆記,需要具備scala語言的基礎,歡迎讀者與我一起**,或者教我新知識呀~

scala對xml有內建支援,直接用xml**就行

import scala.xml.elem

import scala.xml.nodebuffer

val doc:elem =

fred'stitle>

head>

html>

val item:nodebuffer =

fredli>

wilmali>

node類是所有xml節點型別的祖先,兩個最重要的子類是text和elem。

用child方法遍歷父節點下面的每乙個子節點

輸出結果:

輸出結果:

arraybuffer(helloli>, scala)

arraybuffer(yoyo)

通過變成的方式構建節點序列,可以使用nodebuffer,是arraybuffer[node]的子類,可以被隱式轉換為nodeseq,轉換之後就不能再繼續修改它,因為xml節點序列是不可變的

import scala.xml.

val items = new nodebuffer

items += fred

items += wilma

val nodes:nodeseq = items

要處理某個元素的屬性鍵和值,可以使用attributes屬性,返回option型別的節點序列

輸出結果:www.baidu.com

通過呼叫 text方法返回string型別結果,也可以通過下面的方法避免沒有這個屬性返回null的結果,如果沒有返回空

val url2 = ls.attributes

.get("alt").getorelse(text(""))

println(url2)

遍歷節點的所有屬性:

val elem1 = class="nihao"

type=

"wawa">

for(attr

println(attr.key,attr.value.text)

val map:map[string,string] = elem1.attributes.asattrmap

println(map)

兩種方式都可以遍歷節點的所有屬性,第一種方式的attr型別是metadata,第二種方式返回的是鍵值對的map

可以在xml字面量中包含scala的**塊

val items = list(2,3,5)

val elem =

println(elem)

可以用scala表示式來計算屬性值

val e = a>

println(e.attributes("id").text)

val description = "tod"

val q =

println(q.attributes.get("alt").getorelse(text("")))

可以在模式匹配表示式中使用xml字面量

var nodels = list()

nodels = yolo :: nodels

nodels = :: nodels

nodels.foreach(_ match => println(v)

case

=> println("lala")

case _ => println("")

})

可以用下面的方式匹配文字

li> => v

vli> => v.text

xml模式不能有屬性,如果要匹配屬性,需要用守衛

var nodels =

list(

>)

nodels =

"name"

>yolo

:: nodels

nodels =

lalayilia

:: nodels

nodels.foreach(_ match

if (n.attributes("class").text ==

"name")=> println(n)

case

=> println("lala")

case _ => println("")

})

xml節點和節點序列是不可變的,如果要編輯乙個節點,需要建立乙個拷貝

val list = 

fredli>

wilmali>

ul>

val list2 = list.copy(label = "ol")

println(list2)

結果輸出:

fred

wilma

新舊兩個列表的後代是共享的,要新增乙個後代,可以像下面這樣呼叫copy

val list = 

fredli>

wilmali>

ul>

val list2 = list.copy(label = "ol",child = list.child ++

anotherli>)

println(list2)

《快學Scala》第12章 高階函式 學習筆記

scala混合了物件導向和函式式的特性。在函式式程式語言中,函式時 頭等公民 可以像任何其他型別一樣被傳遞和操作 只需要將明細動作包含在函式當中作為引數傳入即可。本章要點概述 在scala中,可以在變數中存放函式 import scala.math.val num 3.14 valfun ceil ...

scala程式設計第16章學習筆記(1)

list列表的基本操作 head方法獲得列表的第乙個元素 tail方法獲得列表除第乙個元素之外的其它元素 isempty 判斷列表是否為空,空的話返回真 last 獲得列表最後乙個元素 init 獲得除最後乙個元素之外的元素 reverse 反轉列表 字首與字尾 drop take splitat ...

快學Scala第二章學習筆記

1 如果在repl中貼上成塊的 可以鍵入 paste,把 貼上進去,ctrl d結束 2 在scala中,塊包含一系列的表示式,其結果也是乙個表示式。快中最後乙個表示式的值就是塊的值。這種特性對於那種某個val初始化需要分多步完成的情況很有用。例如 val distance 3 x y 1 別這樣寫...