一.本章要点

  • XML字面量<like>this</like>的类型为NodeSeq
  • 可以在XML字面量中内嵌Scala代码
  • Node的child属性产出后代节点
  • Node的attributes属性产出包含节点属性的MetaData对象
  • \和\\操作符执行类Xpath匹配
  • 可以在case语句中使用XML字面量匹配节点模式
  • 使用带有RewriteRule示例的RuleTransformer来变换某个节点的后代
  • XML对象利用Java的XML相关方法实现XML文件的加载和保存
  • ConstructingParser是另一个可以使用的解析器,它会保留注释和CDATA节

二.XML字面量

  Scala对XML有内建支持。例:

//类型为scala.xml.Elem
val doc=<html><head><title>Test</title></head></html>
//类型为scala.xml.NodeSeq
val item=<li>Test1</li><li>Test2</li>

三.XML节点

  Node是所有XML节点类型的祖先,两个重要的子类Text和Elem  

四.元素属性

  要处理某个元素的属性键和值,可以使用attributes属性,会产生一个MetaData对象,类似于映射。但是产出的是一个节点序列,而不是字符串。。。

五.内嵌表达式

  可以在XML字面量中包含Scala代码块,动态计算元素的内容。如果代码块产出一个节点序列,序列中的节点会被直接添加到XML,所有其他值都会被放到一个Atom[T]中,这是一个针对类型T的容器,通过data属性取值。。。

六.在属性中使用表达式

  可以用Scala表达式计算属性值,内嵌的代码块也可以产出一个序列。。。

七.特殊节点处理

  有能时需要将非XML文本包含到XML文档中,需要在XML字面量中使用CDATA标记。。。

八.类xPath表达式

  NodeSeq类提供了类似Xpath中的/和//操作符方法。由于//表示注释,Scala用\和\\替换。

  \操作符定位于某个节点或节点序列的直接后代。

  \\操作符定位于任何深度的后代。

九.模式匹配

  可以在模式匹配中使用XML字面量。。。

十.修改元素和属性

  在Scala中,XML节点和节点序列是不可变的如果想要编辑一个节点,则必须创建一个拷贝,给出需要的修改,然后拷贝未被显示修改的部分。

  要拷贝Elem节点,用copy方法,有五个参数:label,attributes,child,还有用于命名空间的prefix和scope。

十一.XML变换

  XML类库提供了一个RuleTransforms类可以将一个或多个RewriteRule实例应用到某个节点及其后代(需要重写所有满足某个特定条件的后代)。。。  

十二.加载和保存

  要从文件中加载XML文档,调用XNL对象的loadFile方法:

import scala.xml.XML
val root=XML.loadFile("xx.xml")

  也可以从java.io.InputStream.java.io.Reader或URL加载:

val root2=XML.load(new FileInputStream("xx.xml"))
val root3=XML.load(new InputStreamreader(new FileInputStream("xx.xml"),"UTF-8")) val root4=XML.load(new URL("https://...."))

  注:文档使用标准的SAX解析器加载(没有提供文档类型定义);  

    Scala还提供了一个解析器,可以保留注释、CDATA节和空白(scala.xml.parsing.ConstructingParser)

    。。。

十三.命名空间

  类似于Java/C++中,命名空间用来避免名称冲突。

  XML命名空间是一个URL,使用xmlns声明一个命名空间。。。    

十四.练习

Scala学习十六——XML处理的更多相关文章

  1. Scala学习十八——高级类型

    一.本章要点 单例类型可用于方法串接和带对象参数的方法 类型投影对所有外部类的对象都包含了其他内部类的实例 类型别名给类型指定一个短小的名称 结构类型等效于”鸭子类型“ 存在类型为泛型的通配参数提供了 ...

  2. Scala学习十四——模式匹配和样例类

    一.本章要点 match表达式是更好的switch,不会有意外调入下一个分支 如果没有模式能够匹配,会抛出MatchError,可以用case _模式避免 模式可以包含一个随意定义的条件,称做守卫 你 ...

  3. Scala学习十——特质

    一.本章要点 类可以实现任意数量的特质 特质可以要求实现它们的类具备特定的字段,方法或超类 和Java接口不同,Scala特质可以提供方法和字段实现 当你将多个特质叠加在一起时,顺序很重要——其方法先 ...

  4. 强化学习(十六) 深度确定性策略梯度(DDPG)

    在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...

  5. Scala学习十九——解析

    一.本章要点 文法定义中的二选一.拼接.选项和重复在Scala组合子解析器中对应|.~.opt和rep 对于RegexParsers而言,字符串字面量和正则表达式匹配的是词法单元 用^^来处理解析结果 ...

  6. Scala学习十二——高阶函数

    一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...

  7. Scala学习十五——注解

    一.本章要点 可以为类.方法.字段.局部变量.参数.表达式.类型参数以及各种类型定义添加注解 对于表达式和类型,注解跟在被注解的条目之后 注解的形式有@Annotation.@Annotation(v ...

  8. Java开发学习(十六)----AOP切入点表达式及五种通知类型解析

    一.AOP切入点表达式 对于AOP中切入点表达式,总共有三个大的方面,分别是语法格式.通配符和书写技巧. 1.1 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法 切入点表达式:要进行增 ...

  9. BizTalk开发系列(十六) XML命名空间

    BizTalk开发过程中如果有对XML进行开发操作,比如在自定义代码里操作XML消息或者在Mapping的时候使用Xpath对XML进行操 作.则有机会遇到XML命名空间的问题.常见的是使用Xpath ...

随机推荐

  1. csp-s模拟95

    近两场开始文件评测,感觉和平时真不太一样. 考试时间是多了$10min$,但处理文件.输入输出什么的杂事也是忙来忙去.这可能也最像真实的$csps$了,稍有疏忽可能都是致命伤. T1.T2挂的对拍全打 ...

  2. nodeJS 项目如何运行

    nodeJS 项目如何运行 一.总结 一句话总结: nodejs项目根目录中用node xx.js 或是 node xx运行 打开 window的 cmd 命令窗口,使用 cd 命令跳转到 nodeJ ...

  3. IDEA中log4j.properties配置文件详解

    配置实例 ### 配置根 ### log4j.rootLogger = debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,D ...

  4. react hook的todolist

    感觉好长时间没写博客一样,app.js代码 import React from 'react'; import { useState } from 'react'; function App() { ...

  5. Socket概述

    Socket套接字概述: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. 通信的两端都有Socket. 网络通信其实就是Socket间的通信. 数据在两个Socket ...

  6. Flask 静态文件缓存问题

    大家好,今天才发现很多学习Flask的小伙伴都有这么一个问题,清理缓存好麻烦啊,今天就教大家怎么解决. 大家在使用Flask静态文件的时候,每次更新,发现CSS或是Js或者其他的文件不会更新. 这是因 ...

  7. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_15-异常处理-异常处理流程

    右侧是框架报的异常 不可预知的,例如数据库连不上这一类的.可以在map中制定某些类的异常,如果找不到就最右边的 99999的, 系统对异常的处理使用统一的异常处理流程: 1.自定义异常类型. 2.自定 ...

  8. Qt编写安防视频监控系统1-通道切换

    一.前言 通道切换在视频监控系统中是最基础的必备功能,一般都会提供1通道+4通道+6通道+8通道+9通道+16通道这几个通道切换,可能做得比较好的还会提供24通道+32通道的,这个可能对电脑的配置就有 ...

  9. WPS--world使用格式刷

    1.在空白处左键点击一下即可出现格式刷

  10. CockroachDB学习笔记——[译]Cgo的成本与复杂性

    原文链接:https://www.cockroachlabs.com/blog/the-cost-and-complexity-of-cgo/ 原作者:Tobias Schottdorf 原文日期:D ...