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进行读写删改等;详见:

http://www.cnblogs.com/tengpan-cn/p/4832624.html

XML 从基础到精通的更多相关文章

  1. js基础到精通全面教程--JS教程

    适合阅读范围:对JavaScript一无所知-离精通只差一步之遥的人 基础知识:HTML JavaScript就这么回事1:基础知识 1 创建脚本块 1: <script language=”J ...

  2. xp-win7-win8的基础到精通教程-系统优化减肥教程-windos装mac

    是否还在使用别人封装的系统?是否还在担心下载后的系统是有病毒的?还在为 安装好新系统后,里面安装的软件全是自己不需要的?担心流氓软件绑定浏览器主页?担心 系统重装后,自己所有的编程软件都需要重新安装? ...

  3. XML的基础之一(概念和语法)

    XML的基础(概念和语法) xml html 概念 异同  XML全称为extensible markup language,即可扩展标记语言,简单理解为可预定义标签的编程语言.它与HTML(超文本标 ...

  4. 如何从Python负零基础到精通数据分析

    一.为什么学习数据分析 1.运营的尴尬:运营人需要一个硬技能每个初入行的新人都会察觉到,运营是一个似乎并没有自己的核心竞争力和安全感的工作.因为每天的工作好像都被各种琐事所围绕,而只有一个主题是永恒不 ...

  5. LINQ to XML 编程基础

    1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocumen ...

  6. xml之基础了解

    1.简介 1>什么XML语言(eXtensible Markup Language) 可扩展标记语言XML是SGML的子集,其目标是允许普通的SGML在Web上以目前HTML的方式被服务.接受和 ...

  7. 零基础到精通Web渗透测试的学习路线

    小编相信很多新手都会遇到以下几个问题 1.零基础想学渗透怎么入手? 2.学习web渗透需要从哪里开始? 这让很多同学都处于迷茫状态而迟迟不下手,小编就在此贴给大家说一下web渗透的学习路线,希望对大家 ...

  8. WEB前端需要了解的XML相关基础知识

    什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没 ...

  9. 零基础到精通Linux,从这篇文章开始

    2018年想做Linux运维的人应该如何学习才能快速精通Linux? Linux入门这么简单,为什么很多人学不会? 想要成为一个合格的运维工程师,到底怎么才能从零开始精通Linux? 作为一个运维小白 ...

随机推荐

  1. java URL编程

    一.URL编程技术 URL是统一资源定位器的缩写,它是指向互联网“资源”的指针.URL表示了Internet上某个资源的地址.URL支持http,file,ftp等 多种协议.通过URL标识,可以直接 ...

  2. 《Windows驱动开发技术详解》之Windows内存管理

    虚拟内存地址 Windows所有的程序(Ring0和Ring3层)可以操作的都是虚拟内存.有一部分单元会和物理内存对应起来,但并非一一对应,多个虚拟内存页可以映射同一个物理内存页.还有一部分单元会被映 ...

  3. WINDOWS特有的消息常量标识符

    '========================================'WINDOWS特有的消息常量标识符'======================================== ...

  4. nfs服务器的建立

    NFS服务器的配置 一.NFS服务器端的配置,即共享发布者 (一)需启动的服务和需安装的软件 1.NFS服务器必须启动两个daemons服务:rpc.nfsd和rpc.mountd   rpc.nfs ...

  5. diff and patch

    A patch captures the changes of two different files (oldfile and newfile). Given the oldfile and the ...

  6. angular中的ng-bind-html指令和$sce服务

    angular js的强大之处之一就是他的数据双向绑定这一牛B功能,我们会常常用到的两个东西就是ng-bind和针对form的ng-model.但在我们的项目当中会遇到这样的情况,后台返回的数据中带有 ...

  7. ecshop 去版权

    与官网通信的几个地方: 1,打开admin/templates/index.htm,查找并删除 <frameset rows="0, 0" framespacing=&quo ...

  8. Heartbeat+DRBD+MySQL高可用方案【转】

    转自Heartbeat+DRBD+MySQL高可用方案 - yayun - 博客园 http://www.cnblogs.com/gomysql/p/3674030.html 1.方案简介 本方案采用 ...

  9. springboot 打包

    springboot 打包 先clean 然后 maven package 通过命令java -jar target/GoshenWepPro-0.1.0.jar运行程序

  10. JavaBean技术的一些讲解

    JavaBean: 由于原先的jsp的html代码和css代码以及java代码都是写在一起的,所以看起来就比较冗余,同时 也体现不了javaBean中面向对象的思想的{当然可以同过jstl标签库以及m ...