# 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、屬性值不能包括<,?>,?&之類的特殊字符,否則需要使用轉義字符。

#### 注釋
????這個和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、元素中不能含冒號(注:冒號留給命名空間使用)?