add Chapter16[02-09] exercises
diff --git a/src/Chapter16/exercise02.scala b/src/Chapter16/exercise02.scala
new file mode 100644
index 0000000..c721b8e
--- /dev/null
+++ b/src/Chapter16/exercise02.scala
@@ -0,0 +1,18 @@
+/**
+ * 如下代码的值是什么?
+<ul>
+  <li>Opening bracket:[</li>
+  <li>Closing bracket:]</li>
+  <li>Opening bracket:{</li>
+  <li>Closing bracket:}</li>
+</ul>
+你如何修复它?
+ */
+val x = <ul>
+  <li>Opening bracket: [</li>
+  <li>Closing bracket: ]</li>
+  <li>Opening brace: {{</li>
+  <li>Closing brace: }}</li>
+</ul>
+
+println(x)
\ No newline at end of file
diff --git a/src/Chapter16/exercise04.scala b/src/Chapter16/exercise04.scala
new file mode 100644
index 0000000..52034a9
--- /dev/null
+++ b/src/Chapter16/exercise04.scala
@@ -0,0 +1,14 @@
+/**
+ * 读取一个XHTML文件并打印所有不带alt属性的img元素
+ */
+
+import scala.xml.XML
+
+var html = "<html><head><title>第一个网页</title></head><body><p><img alt='a'><img src='1'></img></p></body></html>"
+val images = (html \\ "img").filterNot(_.attributes("alt").isDefined)
+val images1 = html match{
+  case n @ <img/> if (!n.attributes("alt")) => n
+}
+
+println(images.mkString("\n"));
+println(images1.mkString("\n"));
\ No newline at end of file
diff --git a/src/Chapter16/exercise05.scala b/src/Chapter16/exercise05.scala
new file mode 100644
index 0000000..bd016cd
--- /dev/null
+++ b/src/Chapter16/exercise05.scala
@@ -0,0 +1,13 @@
+/**
+ * 打印XHTML文件中所有图像的名称,即打印所有位于img元素内的src属性值
+ */
+import scala.xml.XML
+
+var html = "<html><head><title>第一个网页</title></head><body><p><img alt='a'><img src='1'></img></p></body></html>"
+val images = (html \\ "img").flatMap(_.attributes("src"))
+val images1 = html match{
+  case n @ <img/> => Some(n.attributes("src"))
+}
+
+println(images.mkString("\n"));
+println(images1.mkString("\n"));
diff --git a/src/Chapter16/exercise06.scala b/src/Chapter16/exercise06.scala
new file mode 100644
index 0000000..6645204
--- /dev/null
+++ b/src/Chapter16/exercise06.scala
@@ -0,0 +1,9 @@
+/**
+ * 读取XHTML文件并打印一个包含了文件中给出的所有超链接及其url的表格。即,打印所有a元素的child文本和href属性。
+ */
+import scala.xml._
+
+val html = ""
+val links = (html \\ "a") map { (x: Node) => (x.attribute("href").getOrElse("").toString, x.text) } filter {_._1.startsWith("http")}
+
+println(links.mkString("\n"));
diff --git a/src/Chapter16/exercise07.scala b/src/Chapter16/exercise07.scala
new file mode 100644
index 0000000..1e10b80
--- /dev/null
+++ b/src/Chapter16/exercise07.scala
@@ -0,0 +1,12 @@
+/**
+ * 编写一个函数,带一个类型为Map[String,String]的参数,返回一个dl元素,其中针对映射中每个键对应有一个dt,每个值对应有一个dd,例如:
+    Map("A"->"1","B"->"2")
+  应产出<dl><dt>A</dt><dd>1</dd><dt>B</dt><dd>2</dd></dl>
+ */
+def mapToHTML(map: Map[String, String]) = {
+  <dl>{for ((k,v) <- map) yield <dt>{k}</dt><dd>{v}</dd>}</dl>
+}
+
+val x = Map("A" -> "1", "B" -> "2")
+
+println(mapToHTML(x))
\ No newline at end of file
diff --git a/src/Chapter16/exercise08.scala b/src/Chapter16/exercise08.scala
new file mode 100644
index 0000000..7615cb0
--- /dev/null
+++ b/src/Chapter16/exercise08.scala
@@ -0,0 +1,11 @@
+/**
+ * 编写一个函数,接受dl元素,将它转成Map[String,String]。该函数应该是前一个练习中的反向处理,前提是所有dt后代都是唯一的。
+ */
+def htmlToMap(str:String):Map[String,String] = {
+  val dtMap = (str \\ "dt").toMap
+  val ddMap = (str \\ "dd").toMap
+  dtMap.zip(ddMap)
+}
+
+val html = <dl><dt>A</dt><dd>1</dd><dt>B</dt><dd>2</dd></dl>
+println(htmlToMap(html).mkString(","))
\ No newline at end of file
diff --git a/src/Chapter16/exercise09.scala b/src/Chapter16/exercise09.scala
new file mode 100644
index 0000000..1928d26
--- /dev/null
+++ b/src/Chapter16/exercise09.scala
@@ -0,0 +1,9 @@
+/**
+ * 对一个XHTML文档进行变换,对所有不带alt属性的img元素添加一个alt="TODO"属性,其他>内容完全不变。
+ */
+import scala.xml._
+val html = ""
+val replaceNoneAlt = html match{
+  case img @ <img/> if(!_.attribute(alt)) => img % Attribute(null,"alt","TODO",null)
+}
+println(replaceNoneAlt)
\ No newline at end of file