《快学Scala》第十六章习题解答

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>)
  }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值