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. Android:如何实现更换主题

    关键代码:setTheme(int ID); 注意点: 1.设置主题必须要在setContentView() 之前调用,所以需要写个Intent去重新开启Activity. 2.为了切换主题保证流畅性 ...

  2. 自定义UICollectionView

    1.创建一个UICollectionView工程,点击鼠标右侧按钮选择New File->Cocoa Class->点击Next,Class选项填写一个合理的名称,如:MyCollecti ...

  3. ios用xib实现三等分以及多等分思路

    Auto Layout 的本质原理 Auto Layout 的本质是用一些约束条件对元素进行约束,从而让他们显示在我们想让他们显示的地方. 约束主要分为以下几种(欢迎补充): 相对于父 view 的约 ...

  4. c#操作oracle的通用类

    using System;using System.Collections;using System.Collections.Generic;using System.Data;using Syste ...

  5. 【转】PHP android ios相互兼容的AES加密算法

    APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ...

  6. string 转 int,int 转 string

    string str="12345"; int b=atoi(str.c_str()); 可以配合atof,转为double char buf[10]; sprintf(buf,  ...

  7. Ubuntu上安装mono

    How do I use badgerports? badgerports is an Ubuntu repository. In order to use it, you must add it t ...

  8. 模拟。。。 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C

    题目大意:给你一个n*m的矩阵,再给你一个小球,从(0,0)以sqrt(2)/s的速度向右上角出发,遇到边框会反弹,遇到角落就直接停止,给你一些点,问小球第一次经过这些点所需要的时间. 思路:模拟一下 ...

  9. tomcat连接数设置

    如何加大tomcat连接数 在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:minProcessors:最小空闲连接线程数,用 ...

  10. inserted触发器,一张表插入数据时,同时向另外一张表插入数据

    有时候,一个服务器上有多个数据库,需要向其中一个数据库的表中插入数据时, 同时向另外一个数据的表里插入数据. 可以利用触发器和同义词(建立同义词的方法省略), 在一个数据库的表里插入数据时,同时向另外 ...