XML學習總結(二)——XML入門


一、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 等各自的編碼標准。這些使用 字節來代表一個字符的各種漢字延伸編碼方式,稱為 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元素可以包含字母、數字以及其它一些可見字符,但必須遵守下面的一些規范:

  1. 區分大小寫,例如,<P>和<p>是兩個不同的標記。
  2. 不能以數字或"_" (下划線)開頭。
  3. 不能以xml(或XML、或Xml 等)開頭。
  4. 不能包含空格。
  5. 名稱中間不能包含冒號(:)

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         &lt;b1&gt;孤傲蒼狼&lt;/b1&gt;
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語法方面的講解就全部講完了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM