一、XML語法學習
學習XML語法的目的就是編寫XML
一個XML文件分為如下幾部分內容:
- 文檔聲明
- 元素
- 屬性
- 注釋
- CDATA區 、特殊字符
- 處理指令(processing instruction)
1.1、xml語法——文檔聲明
在編寫XML文檔時,需要先使用文檔聲明,聲明XML文檔的類型。
最簡單的聲明語法: <?xml version="1.0" ?>
例如:
1 <?xml version="1.0"?> 2 <softCompany> 3 <company>MicroSoft</company> 4 <company>google</company> 5 <company>Apple</company> 6 </softCompany>
瀏覽器解析結果如下:

用encoding屬性說明文檔的字符編碼:<?xml version="1.0" encoding="GB2312" ?>
當XML文件中有中文時,必須使用encoding屬性指明文檔的字符編碼,例如:encoding="GB2312"或者encoding="utf-8",並且在保存文件時,也要以相應的文件編碼來保存,否則在使用瀏覽器解析XML文件時,就會出現解析錯誤的情況。
例如:
1 <?xml version="1.0"?> 2 <softCompany> 3 <company>MicroSoft</company> 4 <company>google</company> 5 <company>Apple</company> 6 <company>百度</company> 7 </softCompany>
這個XML文件中沒有使用encoding屬性來指明文檔的字符編碼,但文檔里面有“百度”這樣的中文字符,在使用IE瀏覽器解析該XML文件時,IE就不知道該使用什么編碼去解析該文件,就無法解析了,出現的錯誤如下圖(圖-1)所示:

圖-1
要想正確解析該XML文檔,就可以使用encoding屬性指明該文檔的字符編碼。
例如:
1 <?xml version="1.0" encoding="GB2312"?> 2 <softCompany> 3 <company>MicroSoft</company> 4 <company>google</company> 5 <company>Apple</company> 6 <company>百度</company> 7 </softCompany>
此時再次使用IE瀏覽器來解析該XML文件,就可以正常解析出里面的中文字符了,如下圖(圖-2)所示:

圖-2
1.2、編寫XML文件常遇到的一個問題
XML文件一般使用國際化通用的編碼“utf-8”,所以平時看到的XML文件的頭部都會有這樣的代碼:
1 <?xml version="1.0" encoding="utf-8"?>
如果我們使用“記事本”或者“EditPlus”等文本編輯工具編寫XML文件時,例如使用“EditPlus”編寫如下的XML文件:
1 <?xml version="1.0" encoding="utf-8"?> 2 <CharacterEncoding> 3 <中國> 4 <encoding>GB2312</encoding> 5 <encoding>GBK</encoding> 6 </中國> 7 <日本> 8 <encoding>JIS</encoding> 9 </日本> 10 </CharacterEncoding>
當我們在保存文件時,文件的編碼默認是以“ANSI”來保存的,如下圖(圖-3)所示:

圖-3
我們編寫XML文件時,使用encoding="utf-8"來指明了文檔的字符編碼,但是在保存的時候卻使用了“ANSI”編碼來保存文件,由於我們在XML文件中使用encoding="utf-8"來指明了文檔的字符編碼,所以當瀏覽器解析該XML文件時,就是使用“utf-8”編碼來解析,解析結果如下圖(圖-4)所示:

圖-4
可以看到,瀏覽器解析失敗了,這是為什么呢?我們明明指定了文檔的字符編碼是“UTF-8”了呀,為什么里面的中文解析不出來呢?這里不得不說說ANSI編碼到底代表的是神馬意思了。
不同的國家和地區制定了不同的標准,由此產生了 GB2312, BIG5, JIS 等各自的編碼標准。這些使用 2 個字節來代表一個字符的各種漢字延伸編碼方式,稱為 ANSI 編碼。在簡體中文系統下,ANSI 編碼代表GB2312 編碼,在日文操作系統下,ANSI 編碼代表JIS 編碼。 不同 ANSI 編碼之間互不兼容,當信息在國際間交流時,無法將屬於兩種語言的文字,存儲在同一段ANSI 編碼的文本中。
下面分析一下為什么IE瀏覽器X無法解析ML文件的原因:如下圖(圖-5)所示:
圖-5
所以千萬要記住,使用“記事本”或者“EditPlus”等文本編輯工具編寫XML文件時一定要以XML文件的encoding屬性指明的編碼來保存文件,這樣才能保證瀏覽器解析XML文件時可以正常解析。
上述的問題將CharacterEncoding.xml文件再以“UTF-8”編碼保存一次就可以正常解析出CharacterEncoding.xml

圖-6
瀏覽器的解析結果如下圖(圖-7)所示:

圖-7
在使用一些比較智能的IDE編寫XML文件時,IDE在保存XML文件時,會自動以encoding屬性指明的編碼來保存文件,例如在MyEclipse中編寫XML文件時,就可以根據encoding屬性指明的字符編碼,指明為encoding="GB2312"時,保存XML文件時就自動將文件保存成GB2312編碼 (如圖-8),指明為encoding="UTF-8"時,就自動保存為UTF-8 (如圖-9)。

圖-8

圖-9
用standalone屬性說明文檔是否獨立:
1 <?xml version="1.0" encoding="GB2312" standalone="yes" ?>
1.3、xml語法——元素
XML元素指XML文件中出現的標簽,一個標簽分為開始標簽和結束標簽,一個標簽有如下幾種書寫形式,例如:
- 包含標簽體:<a>www.cnblogs.com/</a>
- 不含標簽體的:<a></a>, 簡寫為:<a/>
一個標簽中也可以嵌套若干子標簽。但所有標簽必須合理的嵌套,絕對不允許交叉嵌套 ,例如:
錯誤的寫法:<a>welcome to <b>www.cnblogs.com/</a></b>
格式良好的XML文檔必須有且僅有一個根標簽,其它標簽都是這個根標簽的子孫標簽。
對於XML標簽中出現的所有空格和換行,XML解析程序都會當作標簽內容進行處理。例如:下面兩段內容的意義是不一樣的。
第一段:
1 <網址>http://www.cnblogs.com/</網址>
第二段:
1 <網址> 2 http://www.cnblogs.com/ 3 </網址>
由於在XML中,空格和換行都作為原始內容被處理,所以,在編寫XML文件時,使用換行和縮進等方式來讓原文件中的內容清晰可讀的“良好”書寫習慣可能要被迫改變。
一個XML元素可以包含字母、數字以及其它一些可見字符,但必須遵守下面的一些規范:
- 區分大小寫,例如,<P>和<p>是兩個不同的標記。
- 不能以數字或"_" (下划線)開頭。
- 不能以xml(或XML、或Xml 等)開頭。
- 不能包含空格。
- 名稱中間不能包含冒號(:)
1.4、XML語法——屬性
一個標簽可以有多個屬性,每個屬性都有它自己的名稱和取值,例如: <input name=“text”> ,屬性值一定要用雙引號(")或單引號(')引起來,定義屬性必須遵循與標簽相同的命名規范 。
多學一招:在XML技術中,標簽屬性所代表的信息,也可以被改成用子元素的形式來描述,例如:
1 <input> 2 <name>text</name> 3 </input>
1.5、XML語法——注釋
Xml文件中的注釋采用: <!--注釋--> 格式。
注意:
- XML聲明之前不能有注釋
- 注釋不能嵌套,例如:
<!--大段注釋 …… <!--局部注釋--> …… -->
1.6、XML語法——CDATA區
在編寫XML文件時,有些內容可能不想讓解析引擎解析執行,而是當作原始內容處理,遇到此種情況,可以把這些內容放在CDATA區里,對於CDATA區域內的內容,XML解析程序不會處理,而是直接原封不動的輸出。
語法:<![CDATA[ 內容 ]]>
例如:
1 <?xml version="1.0" encoding="utf-8"?> 2 <soft> 3 <![CDATA[ 4 <a className="gacl.xdp"> 5 <a1>gacl</a1> 6 <a2>xdp</a2> 7 </a> 8 ]]> 9 <b> 10 <b1>孤傲蒼狼</b1> 11 <b2>徐達沛</b2> 12 </b> 13 </soft>
該XML文件使用IE瀏覽器解析引擎解析執行后,結果如下圖(圖-10)所示:

圖-10
對於一些單個字符,若想顯示其原始樣式,也可以使用轉義的形式予以處理。

轉義字符表
例如:
1 <?xml version="1.0" encoding="utf-8"?> 2 <soft> 3 <b> 4 <b1>孤傲蒼狼</b1> 5 <b2>徐達沛</b2> 6 </b> 7 </soft>
解析器解析的結果如下圖(圖-11)所示:

圖-11
1.7、XML語法-處理指令
處理指令,簡稱PI (processing instruction)。處理指令用來指揮解析引擎如何解析XML文檔內容。例如,在XML文檔中可以使用xml-stylesheet指令,通知XML解析引擎,應用css文件顯示xml文檔內容,標簽名為中文時,css不起作用。
<?xml-stylesheet type="text/css" href="css文件名.css"?>
例如:
1 <?xml version="1.0" encoding="utf-8"?> 2 <!--在XML文檔中可以使用xml-stylesheet指令,通知XML解析引擎,應用country.css文件顯示xml文檔內容--> 3 <?xml-stylesheet type="text/css" href="country.css"?> 4 <Country> 5 <c1>中國</c1> 6 <c2>美國</c2> 7 <c3>日本</c3> 8 <c4>韓國</c4> 9 </Country>
Country.css樣式文件代碼如下:
1 c1{ 2 font-size:200px; 3 color:red; 4 } 5 c2{ 6 font-size:150px; 7 color:green; 8 } 9 c3{ 10 font-size:100px; 11 color:#ccc; 12 } 13 c4{ 14 font-size:130px; 15 color:blue; 16 }
在瀏覽器中解析該XML文件的結果如下圖(圖-12)所示:

圖-12
處理指令必須以"<?"作為開頭,以"?>"作為結尾,XML聲明語句(<?xml version="1.0" encoding="utf-8"?>)就是最常見的一種處理指令。
到此,關於XML語法方面的講解就全部講完了。
