1、简介

  XML(可扩展标记语言)语言是一种数据交换标准,用于存储数据;关键词是标记;

  XML具有以下优点:

    (1) 方便的穿过防火墙,在不同的操作系统之间通信,跨语言,跨平台。数据共享非常方便。(JSON也具有同样的问题)

    (2) 由于其自身结构特点,方便面向对象编程

    (3) XML有一系列的相关技术支持,包括文件数据验证,输出,格式转换,文档对象等。

    (4) 可扩展性好

    (5) 在传输方面有很多优势 ,格式统一,更安全一点

  XML缺点:

    (1) 传输也有缺点,传输占用带宽(与json比较)

    (2) 需要很多代码完成解析工作(与JSON比较)

2、XML语法

  XML文件文件,第一行是声明(可选):<?xml version = "1.0" encoding = "GBK"?>   或 <?xml?>

  第二行实体声明(可选):<!DOCTYPE persons
      [<!ENTITY replace "被代替的内容" >]
                          >   

<!DOCTYPE persons[<!ENTITY replace SYSTEM "C:\myTestJava\AnalyticalXML\test.txt" >]
>  ,实体分为内部实体和外部实体,第一种是内部实体,第二种是外部实体。 实体相当于编程语言中的宏,之后就可以用   &text;     代替test.txt文本文件中的内容,实体的作用①代替不便于用键盘输入的字符 ②代替很多文本,避免重复输入

  之后便是各个元素之间的嵌套,语法<name></name>       或       <name />  (注意:  /前面有空格)

  元素名不可以有空格,必须以字母开头;

  根元素名是唯一的,其他元素不可以和根元素重名;其他元素名字可以重复;一个XML文档只能有一个根元素,所有的文档内容都包含在根元素中(前两行可以理解为不是文档内容);

  元素可以具有属性,语法:<name id = "20111907"  age = "23" />    注意:属性值一定要加双引号;

3、XML验证

  对XML的验证有两种方式,一种是DTD,另一种是XSD;

  DTD与XSD的对比:

    DTD使用的是非XML语法,不可扩展,支持的数据类型少;

    XSD遵循XML语法,支持多种数据类型,可以扩展;因此推荐使用XSD对XML进行验证;

  首先要有XSD文件和XML文件,然后利用Java 或者是 C#进行验证即可;

  XSD语法比较复杂,下面进行概述:

  

4、XML解析

  常用的XML解析方式有:DOM、SAX、JDOM、DOM4j

  DOM:文档对象模型,即将整个XML文档读入内存,然后按照树状的层次结构组织存储;跟XML语法比较类似;优缺点:可以随机访问,修改;但内存占用较大;

  SAX:一般称为推模型,按照流的方式顺序循环读取XML文件,根据XML语法标准,触发一系列的事件,在事件中对数据进行处理;还有一种与SAX类似的,称为STAX,也是按照流的方式读取,触发一系列的事件;两者的区别在于循环控制不同。SAX的循环控制是由SAX解析器控制的,而STAX是由应用程序控制的;优缺点:内存占用小,但是不能随机访问,不能访问之前访问过的数据(不可逆性);

  JDOM:是专门针对Java语言封装的接口和类,为开发者提供了一系列的API,缺点也是需要将整个文档读入内存,内存占用大,性能差;

  DOM4J:基于SAX的解析器,读写方便,综合性能最好的解析方式,但是可移植性差;

  

  还有一种不常用的解析方式:VTD  面向文档对象的指针,利用数组对XML文档进行描述,数组的元素是一个64位的数,记录了元素的起始位置,深度等信息,并且在读取的时候是直接以二进制的方式读进内存中的。

5、Xpath

  XPATH是记录XML元素路径的语言;一般用于选取元素  如:selectNode(XPATH)    eg:selectNode("\\*")    选取所有元素

  /    表示绝对路径,即从当前元素开始的绝对路径

  //   表示相对路径,即从当前元素开始所包含的所有元素  模糊匹配 eg:   //person     选取当前元素所包含的所有名为<person>的元素 也许会是子元素的子元素

  *    表示任何,匹配所有元素   如://*        选取当前元素包含的所有元素

  []    类似于数组的下标,如://person[1]   选取//person 所选取的所有元素中的第一个,类似于还有[last()]

  |     或,用于连接两个XPATH          如://men  |  //women    选取当前元素所包含的所有<men>  和<women>

  @    表示属性,必须放在中括号里。如://[@id]  表示选取所有具有id属性的元素;  //[@id][@age]   表示选取具有id和age两个属性的元素       //[@*]    表示选取所有具有属性的元素;

 

关于XML解析,仅研究了利用DOM4j技术对XML进行读写删改等;详见: