`
mwei
  • 浏览: 123924 次
  • 性别: Icon_minigender_1
  • 来自: 抽象空间
社区版块
存档分类
最新评论

Scala: handle XML

阅读更多
Scala对XML文档的处理是如此简洁,代码摘自动物世界-马来貘那本,稍做改动,如下:
import scala.xml._
object XMLhandler {
  val someXML=
    <sammich>
      <bread>wheat</bread>
      <meat>salami</meat>
      <condiments>
        <condiment expired="true">mayo</condiment>
        <condiment expired="false">mustard</condiment>
      </condiments>
    </sammich>
  
    def main(args:Array[String]):Unit={
      someXML match{
        case <sammich>{ingredients @ _*}</sammich>=>{
            for(<condiments>{ conds @ _*}</condiments> <- ingredients; cond<-conds){
                 if((cond \ "@expired").text=="true")
                    println("1: "+cond.text+" has expired!!")
            }
        }
      } //end match
      
      for(condiment<- (someXML \\ "condiment")){       
        if((condiment \ "@expired").text=="true")
          println("2: "+condiment.text+" has expired!!")
      }
    }
}

output:
1: mayo has expired!!
2: mayo has expired!!

说明:
很显然这里使用了模式匹配,case里的ingredients直接提取了XML片段的<condiments>元素(包括自身和其内部元素);
第一个for循环里conds提取了两个<condiment>元素,然后对每个<condiment>元素借助cond遍历,
然后在if里使用投影函数(projection function)反斜线(\)找到expired属性,这个属性类型是scala.xml.NodeSeq,
调用这个类型的text方法取得属性值("true","false"),然后打印过期的调料。
第二个for循环使用另一投影函数双反斜线(\\)直接提取深层子元素<condiment>,然后判断、打印。
两个投影函数 \ 与 \\ 称作姊妹函数,我认为前者一个反斜线,叫做“影一”,后者叫做“影二”吧,这样也好记;
这两个函数的区别在于“影一”不进行深度查找,只对兄弟元素、姐妹属性查找,算是广度查找;后者则进行深度查找。


分享到:
评论

相关推荐

    scala-xml_2.11-1.0.1-API文档-中文版.zip

    赠送jar包:scala-xml_2.11-1.0.1.jar; 赠送原API文档:scala-xml_2.11-1.0.1-javadoc.jar; 赠送源代码:scala-xml_2.11-1.0.1-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.11-1.0.1.pom; 包含翻译后的API...

    scala-xml_2.11-1.0.4-API文档-中英对照版.zip

    赠送jar包:scala-xml_2.11-1.0.4.jar; 赠送原API文档:scala-xml_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-xml_2.11-1.0.4-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.11-1.0.4.pom; 包含翻译后的API...

    scala-xml_2.12-1.0.6-API文档-中文版.zip

    赠送jar包:scala-xml_2.12-1.0.6.jar; 赠送原API文档:scala-xml_2.12-1.0.6-javadoc.jar; 赠送源代码:scala-xml_2.12-1.0.6-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.12-1.0.6.pom; 包含翻译后的API...

    scala-xml_2.11-1.0.5-API文档-中英对照版.zip

    赠送jar包:scala-xml_2.11-1.0.5.jar; 赠送原API文档:scala-xml_2.11-1.0.5-javadoc.jar; 赠送源代码:scala-xml_2.11-1.0.5-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.11-1.0.5.pom; 包含翻译后的API...

    scala-xml_2.11-1.0.5-API文档-中文版.zip

    赠送jar包:scala-xml_2.11-1.0.5.jar; 赠送原API文档:scala-xml_2.11-1.0.5-javadoc.jar; 赠送源代码:scala-xml_2.11-1.0.5-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.11-1.0.5.pom; 包含翻译后的API...

    在Scala中进行编程:全面的分步指南Programming in Scala: A comprehensive step-by-step guide

    《在Scala中进行编程:全面的分步指南》(Programming in Scala: A comprehensive step-by-step guide)是一本关于Scala编程语言的权威教材。这本书的独特之处在于它的共同作者是Scala语言的设计师Martin Odersky,...

    scala-xml_2.11-1.0.1-API文档-中英对照版.zip

    赠送jar包:scala-xml_2.11-1.0.1.jar; 赠送原API文档:scala-xml_2.11-1.0.1-javadoc.jar; 赠送源代码:scala-xml_2.11-1.0.1-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.11-1.0.1.pom; 包含翻译后的API...

    Scala:Applied Machine Learning

    Scala:Applied Machine Learning by Pascal Bugnion English | 23 Feb. 2017 | ISBN-13: 9781787126640 | 1843 Pages | EPUB/PDF (conv) | 33.15 MB Leverage the power of Scala and master the art of building, ...

    Scala: Guide for Data Science Professionals

    "Scala: Guide for Data Science Professionals (Learning Path)" ASIN: B06XCJVY21, eISBN: 1787282856 | 2017 | True PDF | 1100 pages | 15 MB Scala will be a valuable tool to have on hand during your data...

    Scala xml解析全解教程

    scala xml parse Scala xml解析全解教程 学习用scala处理解析xml

    scala-xml_2.11-1.0.4-API文档-中文版.zip

    赠送jar包:scala-xml_2.11-1.0.4.jar; 赠送原API文档:scala-xml_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-xml_2.11-1.0.4-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.11-1.0.4.pom; 包含翻译后的API...

    scala-xml_2.12-1.0.6-API文档-中英对照版.zip

    赠送jar包:scala-xml_2.12-1.0.6.jar; 赠送原API文档:scala-xml_2.12-1.0.6-javadoc.jar; 赠送源代码:scala-xml_2.12-1.0.6-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.12-1.0.6.pom; 包含翻译后的API...

    scala-xml:标准的Scala XML库

    Scala-XML是Scala编程语言中的一个标准库,用于处理XML数据。这个库为开发者提供了方便、类型安全的方式来创建、解析和操作XML文档。在Scala中,XML被当作一种第一类的值,这意味着它可以像其他数据类型一样进行操作...

    Spark技术实战之基础篇 -Scala语言从入门到精通 Scala编程详解 含课件和资料 共21个章节.rar

    【课程大纲】第1讲-Spark的前世今生第2讲-课程介绍、特色与价值第3讲-Scala编程:基础语法第4讲-Scala编程:条件控制与循环第5讲-Scala编程:函数入门第6讲-Scala编程:函数入门之默认参数和带名参数第7讲-Scala编程...

    CrossCuttingConcern_Scala:在 Scala 中使用面向切面编程 (AOP) 实现横切关注

    "CrossCuttingConcern_Scala" 可能就是这样一个项目,它展示了如何在 Scala 中利用第三方库如 Scalaz 或 Aspects4s 来实践 AOP。 Scalaz 是一个强大的 Scala 库,提供了许多函数式编程工具,包括类型类、Monads 和...

    Programming.Scala_Tackle.Multi-Core.Complexity.on.the.Java.Virtual.Machine[2009][EN][PDF]

    Programming Scala: Tackle Multi-Core Complexity on the Java Virtual Machine by Venkat Subramaniam Scala is an exciting, modern, multi-paradigm language for the JVM. You can use it to write ...

    scala:scala代码

    在"scala: scala代码"的描述中,我们可以推测这是一个关于Scala编程语言的学习资源或者项目源代码。 1. **面向对象编程**:Scala是基于Java虚拟机(JVM)的语言,因此它兼容Java的所有类库。它支持类、对象和继承等...

    testcontainers-scala:用于在Scala中进行测试的Docker容器

    Testcontainers-scala 用于Scala包装器,允许使用容器进行功能/... 行动中的Testcontainers-scala: ://dimafeng.com/2016/08/01/testcontainers-selenium/松弛设置对于scalatest用户: libraryDependencies + = " ...

    matlab有些代码不运行-plotly-scala:Scally的plotly.js绑定

    将org.plotly-scala::plotly-almond:0.8.1依赖项添加到笔记本中。 (最新版本:)然后初始化plotly-scala,并像使用它一样使用它 import $ivy . `org.plotly-scala::plotly-almond:0.8.1` import plotly . _ import

Global site tag (gtag.js) - Google Analytics