zoukankan      html  css  js  c++  java
  • 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声明一个命名空间。。。    

    十四.练习

  • 相关阅读:
    eXtremeDB 简单开发
    MFC PostMessage SendMessage
    char string 区别
    div 水平垂直居中
    npm—小记
    ECharts简单运行例子
    HTML在表格中添加echarts图表
    Sublime Text 3配置JavaScript运行环境
    bjdctf_2020_YDSneedGrirlfriend
    wdb_2018_2nd_easyfmt
  • 原文地址:https://www.cnblogs.com/lyq-biu/p/11977833.html
Copyright © 2011-2022 走看看