一.本章要点

  • 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. Pluck CMS 4.7.10远程代码执行漏洞分析

    本文首发于先知: https://xz.aliyun.com/t/6486 0x01漏洞描述 Pluck是用php编写的一款的小型CMS影响版本:Pluck CMS Pluck CMS 4.7.10( ...

  2. selenium 隐式等待报错 value must be a non-negative integer

    笔者运行代码使用selenium的隐式等待时出现报错: from selenium import webdriver # 从selenium导入webdriver import time driver ...

  3. [转][C#]基础连接已经关闭 未能为 SSL/TLS 安全通道建立信任关系

    来自:https://www.cnblogs.com/waw/p/8286608.html 代码部分: static TestApplication(){ ServicePointManager.Se ...

  4. js传值到后台乱码问题

    1.前台js的路径 var addurl1="ldcOrderController.do?goods&orderGoodsExtra="+encodeURI(encodeU ...

  5. Windows 7开发:UAC数据重定向 - Win32 Native

    Windows 7开发:UAC数据重定向 - Win32 Native 目标 本动手实验中,您将会学习如何: • 故障排除一个文件重定向 问题 • 使用Process Monitor查找引起问题的根本 ...

  6. jmeter测试报告套路

    各位: 以下是本周第一次双师压测结果,后续优化后会更新优化结果.   配置: 压测环境:   staging压测服务器配置4核16G,数据库4核8G 线上环境:   服务器配置16核24G,数据库主库 ...

  7. leetcode刷题-559. Maximum Depth of N-ary Tree

    题目: https://leetcode.com/problems/maximum-depth-of-n-ary-tree/description/ n-ary-tree的数据结果表示 // Defi ...

  8. Linux学习笔记之系统中的分区和文件系统

    转自 http://blog.csdn.net/hanxuehen/article/details/8229472

  9. Flutter酷炫的路由动画效果

    现在Flutter的路由效果已经非常不错了,能满足大部分App的需求,但是谁不希望自己的App更酷更炫那,下面介绍几个酷炫的路由动画. 其实路由动画的原理很简单,就是重写并继承PageRouterBu ...

  10. markdown居中对齐,左对齐,右对齐

    Markdown语法本身没有居中,但Markdown中支持基本的HTMl语法,可以使用HTML语法. 居中: <center>居中</center> 左对齐: <p al ...