XML 从基础到精通
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 从基础到精通的更多相关文章
- js基础到精通全面教程--JS教程
适合阅读范围:对JavaScript一无所知-离精通只差一步之遥的人 基础知识:HTML JavaScript就这么回事1:基础知识 1 创建脚本块 1: <script language=”J ...
- xp-win7-win8的基础到精通教程-系统优化减肥教程-windos装mac
是否还在使用别人封装的系统?是否还在担心下载后的系统是有病毒的?还在为 安装好新系统后,里面安装的软件全是自己不需要的?担心流氓软件绑定浏览器主页?担心 系统重装后,自己所有的编程软件都需要重新安装? ...
- XML的基础之一(概念和语法)
XML的基础(概念和语法) xml html 概念 异同 XML全称为extensible markup language,即可扩展标记语言,简单理解为可预定义标签的编程语言.它与HTML(超文本标 ...
- 如何从Python负零基础到精通数据分析
一.为什么学习数据分析 1.运营的尴尬:运营人需要一个硬技能每个初入行的新人都会察觉到,运营是一个似乎并没有自己的核心竞争力和安全感的工作.因为每天的工作好像都被各种琐事所围绕,而只有一个主题是永恒不 ...
- LINQ to XML 编程基础
1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocumen ...
- xml之基础了解
1.简介 1>什么XML语言(eXtensible Markup Language) 可扩展标记语言XML是SGML的子集,其目标是允许普通的SGML在Web上以目前HTML的方式被服务.接受和 ...
- 零基础到精通Web渗透测试的学习路线
小编相信很多新手都会遇到以下几个问题 1.零基础想学渗透怎么入手? 2.学习web渗透需要从哪里开始? 这让很多同学都处于迷茫状态而迟迟不下手,小编就在此贴给大家说一下web渗透的学习路线,希望对大家 ...
- WEB前端需要了解的XML相关基础知识
什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没 ...
- 零基础到精通Linux,从这篇文章开始
2018年想做Linux运维的人应该如何学习才能快速精通Linux? Linux入门这么简单,为什么很多人学不会? 想要成为一个合格的运维工程师,到底怎么才能从零开始精通Linux? 作为一个运维小白 ...
随机推荐
- Android:如何实现更换主题
关键代码:setTheme(int ID); 注意点: 1.设置主题必须要在setContentView() 之前调用,所以需要写个Intent去重新开启Activity. 2.为了切换主题保证流畅性 ...
- 自定义UICollectionView
1.创建一个UICollectionView工程,点击鼠标右侧按钮选择New File->Cocoa Class->点击Next,Class选项填写一个合理的名称,如:MyCollecti ...
- ios用xib实现三等分以及多等分思路
Auto Layout 的本质原理 Auto Layout 的本质是用一些约束条件对元素进行约束,从而让他们显示在我们想让他们显示的地方. 约束主要分为以下几种(欢迎补充): 相对于父 view 的约 ...
- c#操作oracle的通用类
using System;using System.Collections;using System.Collections.Generic;using System.Data;using Syste ...
- 【转】PHP android ios相互兼容的AES加密算法
APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ...
- string 转 int,int 转 string
string str="12345"; int b=atoi(str.c_str()); 可以配合atof,转为double char buf[10]; sprintf(buf, ...
- Ubuntu上安装mono
How do I use badgerports? badgerports is an Ubuntu repository. In order to use it, you must add it t ...
- 模拟。。。 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C
题目大意:给你一个n*m的矩阵,再给你一个小球,从(0,0)以sqrt(2)/s的速度向右上角出发,遇到边框会反弹,遇到角落就直接停止,给你一些点,问小球第一次经过这些点所需要的时间. 思路:模拟一下 ...
- tomcat连接数设置
如何加大tomcat连接数 在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:minProcessors:最小空闲连接线程数,用 ...
- inserted触发器,一张表插入数据时,同时向另外一张表插入数据
有时候,一个服务器上有多个数据库,需要向其中一个数据库的表中插入数据时, 同时向另外一个数据的表里插入数据. 可以利用触发器和同义词(建立同义词的方法省略), 在一个数据库的表里插入数据时,同时向另外 ...