# XML入门
### 基本概述
可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。
#### XML的历史起源
1969年,GML(Generalized Markup Language通用标记语言)---->1985年,SGML(Standard Generalized Markup Language标准通用标记语言)--->1993年,HTML(Hypertext Markup Language超文本标记语言)--->1998年,XML(Extensible Markup Language可扩展标记语言)
#### 什么是可扩展标记语言?
1、可扩展标记语言是一种很像超文本标记语言的标记语言。
2、它的设计宗旨是传输数据,而不是显示数据。
3、它的标签没有被预定义。您需要自行定义标签。
4、它被设计为具有自我描述性。
5、它是W3C的推荐标准。
#### 可扩展标记语言和超文本标记语言之间的差异?
1、它不是超文本标记语言的替代。
2、它是对超文本标记语言的补充。
3、它和超文本标记语言为不同的目的而设计:
4、它被设计用来传输和存储数据,其焦点是数据的内容。
5、超文本标记语言被设计用来显示数据,其焦点是数据的外观。
6、超文本标记语言旨在显示信息,而它旨在传输信息。
7、对它最好的描述是:它是独立于软件和硬件的信息传输工具。
#### 为什么需要XML?
1、解决了数据传输不规范的问题。
2、可以非常好的描述树形结构的事物。
3、可以用作配置文件。
PS:现如今很多很多语言,很多技术都在用XML作为数据传递的标准,所以深刻的理解XML,就相当于掌握了一门通用的数据传输协议。
参考文档:[http://www.w3school.com.cn/xml/](http://www.w3school.com.cn/xml/)
案例:
~~~
<?xml version="1.0" encoding="UTF-8"?>
<class>
<stu id="a001">
<name>张三</name>
<sex>男</sex>
<age>20</age>
</stu>
<stu id="a002">
<name>李四</name>
<sex>女</sex>
<age>18</age>
</stu>
</class>
~~~
### XML基本语法
一个XML文件可分为如下几部分内容:
文档声明 、元素、属性、注释 、CDATA区 ,特殊字符 、处理指令(processing instruction)
基本语法:
~~~
<?xml version="1.0" encoding="UTF-8"?>
<!-- 上面是文档声明 - ->
<?xml-stylesheet type="text/css" href=”XML2.css”?>
<!-- 上面是处理指令 - ->
<根元素>
<!-- 注释 - ->
<![CDATA[ CDATA区,可以是任意字符 ]]>
<元素 属性=”属性值”>
<元素>元素内容</元素>
<空元素/>>
</元素>
</class>
~~~
#### 文档声明
~~~
<?xml version="1.0" encoding=“编码方式" standalone="yes|no"?>
~~~
XML声明放在XML文档的第一行
XML声明由以下几个部分组成:
version - -文档符合XML1.0规范
encoding - -文档字符编码,比如”utf-8”
standalone - -文档定义是否独立使用
standalone="yes“
standalone=“no” 默认
PS:虽说现在XML出了2.0版了,但是现在大多还是用1.0版。
#### 元素
基本语法:
~~~
<元素>元素内容</元素>
<元素/>
~~~
注意事项:
1、每个XML文档必须有且只有一个根元素。
2、根元素是一个完全包括文档中其他所有元素的元素。
3、根元素的起始标记要放在所有其他元素的起始标记之前。
4、根元素的结束标记要放在所有其他元素的结束标记之后。
5、XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:
包含标签体:<a>123</a>
不含标签体的:<a></a>, 简写为:<a/>
6、一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套 ,例如:
<a>hello <b>world</a></b>
7、对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。
例如:
<a>123</a>和<a> 123 </a>意义是完全不同的。
8、一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:
1---区分大小写,例如,<P>和<p>是两个不同的标记。
2---不能以数字或"_" (下划线)开头。
3---不能包含空格。
4---名称中间不能包含冒号(:)。
9、元素、标签、节点意义都是一样的。
#### 属性
基本语法
~~~
<元素 属性1=”属性值” 属性2=”属性值”>元素内容</元素>
~~~
注意事项:
1、属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔;有",用'分隔)
2、一个元素可以有多个属性,它的基本格式为:
3、属性名称在同一个元素标记中只能出现一次
4、属性值不能包括<, >, &之类的特殊字符,否则需要使用转义字符。
![](https://box.kancloud.cn/2016-02-23_56cbc87fc707c.jpg)
#### 注释
这个和HTML一样,都是<!-- 注释 - ->,同样也不能注释嵌套,不能放在元素名中间。
#### CDATA区
有些内容可能不想让解析引擎解析执行,而是当作原始内容处理,用于把整段文本解释为纯字符数据而不是标记的情况。包含大量<、>、&或者"字符。CDATA区中的所有字符都会被当作元素字符数据的常量部分,而不是XML标记。
PS:CDATA区可以用于传递特殊字符,传递文件数据。可以通过将图片这类二进制文件以byte[]的形式放入CDATA区中,需要使用时在以byte[]的方式读出。
#### 处理指令
处理指令,简称PI (Processing Instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。 例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。
案例:
~~~
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="XML2.css" type="text/css"?>
<class>
<student>
<name>张三</name>
<sex>男</sex>
<age>20</age>
</student>
<student>
<name>李四</name>
<sex>女</sex>
<age>18</age>
</student>
</class>
~~~
**XML2.css**
~~~
name {
font-size: 20px;
font-weight: bold;
color: red;
}
sex{
font-size: 30px;
font-weight: bolder;
color: blue;
}
age{
font-size: 25px;
font-weight: bolder;
color: blue;
}
~~~
### 小结
1、XML必须有且仅有一个根元素
2、元素大小写敏感
3、元素不能以数字,下划线开头
4、属性值用引号
5、属性值如果有特殊字符要用实体表示
6、同一元素的属性必须唯一,属性值可以不唯一
7、非空元素标记必须成对
8、空标记要写关闭符号
9、元素必须正确嵌套
10、元素中可以包含字母、数字或者其它字符(支持中文)
11、元素中不能含空格
12、元素中不能含冒号(注:冒号留给命名空间使用)