Scala学习十六——XML处理
一.本章要点
- 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处理的更多相关文章
- Scala学习十八——高级类型
一.本章要点 单例类型可用于方法串接和带对象参数的方法 类型投影对所有外部类的对象都包含了其他内部类的实例 类型别名给类型指定一个短小的名称 结构类型等效于”鸭子类型“ 存在类型为泛型的通配参数提供了 ...
- Scala学习十四——模式匹配和样例类
一.本章要点 match表达式是更好的switch,不会有意外调入下一个分支 如果没有模式能够匹配,会抛出MatchError,可以用case _模式避免 模式可以包含一个随意定义的条件,称做守卫 你 ...
- Scala学习十——特质
一.本章要点 类可以实现任意数量的特质 特质可以要求实现它们的类具备特定的字段,方法或超类 和Java接口不同,Scala特质可以提供方法和字段实现 当你将多个特质叠加在一起时,顺序很重要——其方法先 ...
- 强化学习(十六) 深度确定性策略梯度(DDPG)
在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...
- Scala学习十九——解析
一.本章要点 文法定义中的二选一.拼接.选项和重复在Scala组合子解析器中对应|.~.opt和rep 对于RegexParsers而言,字符串字面量和正则表达式匹配的是词法单元 用^^来处理解析结果 ...
- Scala学习十二——高阶函数
一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...
- Scala学习十五——注解
一.本章要点 可以为类.方法.字段.局部变量.参数.表达式.类型参数以及各种类型定义添加注解 对于表达式和类型,注解跟在被注解的条目之后 注解的形式有@Annotation.@Annotation(v ...
- Java开发学习(十六)----AOP切入点表达式及五种通知类型解析
一.AOP切入点表达式 对于AOP中切入点表达式,总共有三个大的方面,分别是语法格式.通配符和书写技巧. 1.1 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法 切入点表达式:要进行增 ...
- BizTalk开发系列(十六) XML命名空间
BizTalk开发过程中如果有对XML进行开发操作,比如在自定义代码里操作XML消息或者在Mapping的时候使用Xpath对XML进行操 作.则有机会遇到XML命名空间的问题.常见的是使用Xpath ...
随机推荐
- Java并发指南13:Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析 转自https://www.javadoop.com/post/hashmap#toc7 部分内容转自 http: ...
- WIN10环境下点击通知栏图标时自动切换输入法导致图标位置变动
这个问题由来已久,每当点击系统右下角任务栏中的按钮时,原本是搜狗输入法就会自动变成“US [ 中文(简体,中国) ]”,图标会自动错位,导致响应的是其他功能. 假设上图是正常的环境,此时我点击电池图标 ...
- 慢查询explan详解
慢查询排查 show status; // 查询mysql数据库的一些运行状态 show status like 'uptime'; // 查看mysql数据库启动多 ...
- Maven 3.6.1 下载及安装配置
Step1:Download You can download Maven3.6.1 from maven.apche.org , or from here. Step2:Unzip and add ...
- OpenNESS,开源的边缘网络服务平台
目录 文章目录 目录 参考文章 OpenNESS 的电梯间演讲 OpenNESS 与 ETSI MEC Edge Controller Software 的功能清单 Edge Platform Sof ...
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_02-自定义查询页面-服务端-接口开发
在Service中实现自定义查询 StringUtils.isNotEmpty()是这个包下的org.apache.commons.lang3.StringUtils; 再设置其他的条件 定义Exam ...
- eNSP V100R002C00B500 Setup模拟CE6800
本人操作系统:Windows7 64 下载需要的安装包: eNSP V100R002C00B500 官网下载地址:点击这里 CE6800 官网下载地址:点击这里 USG6000V ...
- 免Root停用“Android键盘(AOSP)”
一.效果:隐藏手机状态栏输入法选择图标: 二.手段:使用ADB免root 停用系统默认Android键盘(AOSP),这里参考了大神的方法,在此表示感谢: 三.实现过程: 上图 下面就是按照大神的方法 ...
- 建立本地yum仓库
[root@ks-server ~]# cd /etc/yum.repos.d/[root@ks-server yum.repos.d]# ls CentOS-Base.repo CentOS-Med ...
- ubuntu安装以及卸载软件
dpkg安装以及卸载软件 deb文件是linux发行版debian系统的安装包格式,还有像基于debian系统的发型版ubuntu等系统就是使用的deb格式安装包,我们可以使用dpkg命令进行安装管理 ...