RT。
package com.scalalearn.scala.main
import javafx.scene.NodeBuilder
import javax.xml.parsers.SAXParser
import scala.collection.mutable
import scala.xml._
import scala.xml.Attribute
import scala.xml.transform.RuleTransformer
/**
* 《快学scala》第16章习题解答
*/
object LearnScala16 {
//4.读取一个xml文件并打印所有不带alt的img元素
def execise4(xmlpath:String):Unit = {
val root = XML.loadFile(xmlpath)
for(elem <- root \\ "img"){
var hasAlt:Boolean = false
for(attr <- elem.attributes){
if(attr.key == "alt"){
hasAlt = true
}
}
if(!hasAlt){
println(elem)
}
}
}
//打印xml文件中img文件的src属性
def execise5(xmlpath:String):Unit = {
val root = XML.loadFile(xmlpath)
for(elem <- root \\ "img"){
println(elem.attribute("src").getOrElse(Text("")))
}
}
//打印xml文件中的超链接文本与url对应关系
def execise6(xmlpath:String):Unit = {
val root = XML.loadFile(xmlpath)
for(elem <- root\\"a"){
var text:String = ""
if(elem.child.size > 0){
val child = elem.child(0)
text = child.text
}
printf("%s=>%s\n",text,elem.attribute("href").getOrElse(Text("")))
}
}
//根据Map[String,Sting]返回dl
//Map("A"->"1","B"->"2")对应<dl><dt>A</dt><dd>1</dd><dt>B</dt><dd>2</dd></dl>
def execise7(map:Map[String,String]):Unit = {
val items = new NodeBuffer
val xml = <dl>{for((key,value)<-map)yield <dt>{key}</dt><dd>{value}</dd>}</dl>
println(xml)
}
//8.execise7的逆向实现
def execise8(elem:Elem):Unit = {
val map:mutable.HashMap[String,String] = new mutable.HashMap[String,String]()
val dtval = elem \\ "dt"
val ddval = elem \\ "dd"
val len = dtval.size
for(i <- 0 until len){
map.put(dtval(i).text,ddval(i).text)
}
println(map)
}
def main(args:Array[String]):Unit = {
println("***execise4*****************")
LearnScala16.execise4("d:/test.xml")
println("***execise5*****************")
LearnScala16.execise5("d:/test.xml")
println("***execise6*****************")
LearnScala16.execise6("d:/test.xml")
println("***execise7*****************")
LearnScala16.execise7(Map("A"->"1","B"->"2"))
println("***execise8*****************")
LearnScala16.execise8(<dl><dt>A</dt><dd>1</dd><dt>B</dt><dd>2</dd></dl>)
}
}