XML學習2:XML基本語法(一)
匯入
一個XML檔案可分為如下幾部分內容:文件宣告 、元素、屬性、註釋 、CDATA區 ,特殊字元 、處理指令
(processing instruction)等。
先來看一個簡單的XML說明:
<?xml version="1.0" encoding="UTF-8"?> <!--上面是文件宣告--> <?xml-stylesheet type="text/css" href=”XML2.css”?> <!--上面是處理指令--> <根元素> <!--註釋--> <![CDATA[CDATA區,可以是任意字元]]> <元素 屬性="屬性值”> <元素>元素內容</元素> <空元素/> </元素> </根元素>
一XML語法規則
XML的語法規則很簡單,且很有邏輯。這些規則很容易學習,也很容易使用。
(1)所有XML元素都須有關閉標籤
在HTML,經常會看到沒有關閉標籤的元素:
<p>This is a paragraph
<p>This is another paragraph
在XML中,省略關閉標籤是非法的。所有元素都必須有關閉標籤:
<p>This is a paragraph</p>
<p>This is another paragraph</p>
註釋:您也許已經注意到XML宣告沒有關閉標籤。這不是錯誤。宣告不屬於XML本身的組成部分。它不是XML元
素,也不需要關閉標籤。
(2)XML標籤對大小寫敏感
XML元素使用XML標籤進行定義。
XML標籤對大小寫敏感。在XML中,標籤<Letter>與標籤<letter>是不同的。
必須使用相同的大小寫來編寫開啟標籤和關閉標籤:
<Message>這是錯誤的。</message>
<message>這是正確的。</message>
註釋:開啟標籤和關閉標籤通常被稱為開始標籤和結束標籤。不論您喜歡哪種術語,它們的概念都是相同的。 (3)XML必須正確地巢狀
在HTML中,常會看到沒有正確巢狀的元素:
<b><i>This text is bold and italic</b></i>
在XML中,所有元素都必須彼此正確地巢狀:
<b><i>This text is bold and italic</i></b>
在上例中,正確巢狀的意思是:由於<i>元素是在<b>元素內開啟的,那麼它必須在<b>元素內關閉。(4)XML文件必須有根元素
XML文件必須有一個元素是所有其他元素的父元素。該元素稱為根元素。
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
(5)XML的屬性值須加引號
與HTML類似,XML也可擁有屬性(名稱/值的對)。
在XML中,XML的屬性值須加引號。請研究下面的兩個XML文件。第一個是錯誤的,第二個是正確的:
<note date=08/08/2008>
<to>George</to>
<from>John</from>
</note>
<note date="08/08/2008">
<to>George</to>
<from>John</from>
</note>
在第一個文件中的錯誤是,note元素中的date屬性沒有加引號。
(6)實體引用
在XML中,一些字元擁有特殊的意義。為了避免把字元資料和標籤中需要用到的一些特殊符號相混淆,XML還提
供了實體引用
如果你把字元"<"放在XML元素中,會發生錯誤,這是因為解析器會把它當作新元素的開始。
這樣會產生XML錯誤:
<message>if salary < 1000 then</message>
為了避免這個錯誤,請用實體引用來代替 "<" 字元:
<message>if salary < 1000 then</message>
在XML中,有 5 個預定義的實體引用:
註釋:在XML中,只有字元"<"和"&"確實是非法的。大於號是合法的,但是用實體引用來代替它是一個好習慣。
(7)XML中的註釋
XML註釋和HTML一樣,都是<!-- 註釋-->,同樣也不能註釋巢狀,不能放在元素名中間。
在XML中編寫註釋的語法與HTML的語法很相似:
<!-- This is a comment -->
(8)在XML中,空格會被保留
HTML會把多個連續的空格字元裁減(合併)為一個:
HTML:Hello my name is David.輸出:Hello my name is David.
在XML中,文件中的空格不會被刪節。
(9)XML文件宣告
大多數XML檔案以XML宣告作為開始,它提供了關於文件的基本資訊。
<?xml version="1.0" encoding=“編碼方式" standalone="yes|no"?>
XML宣告放在XML文件的第一行。
XML宣告由以下幾個部分組成:
version表示XML的版本。
encoding表示XML檔案使用的字元編碼方法,有utf-8,gb2312,ISO-8859-1等編碼方式。
standalone表示文件定義是否獨立使用。它有兩個值:standalone="yes“和standalone=“no”(預設)。
二XML元素
XML文件包含XML元素。
(1)什麼是XML元素
XML元素指的是從(且包括)開始標籤直到(且包括)結束標籤的部分。元素可包含其他元素、文字或者兩者的混合
物。元素也可以擁有屬性。
XML元素基本語法:<元素>元素內容</元素>
注意事項:
1)每個XML文件必須有且只有一個根元素。
2)根元素是一個完全包括文件中其他所有元素的元素。
3)根元素的起始標記要放在所有其他元素的起始標記之前。
4)根元素的結束標記要放在所有其他元素的結束標記之後。
5)XML元素指XML檔案中出現的標籤,一個標籤分為開始標籤和結束標籤,一個標籤有如下幾種書寫形式,如:
包含標籤體:<a>123</a>
不含標籤體的:<a></a>, 簡寫為:<a/>
6)對於XML標籤中出現的所有空格和換行,XML解析程式都會當作標籤內容進行處理。例如: <a>123</a>和<a>
123 </a>意義是完全不同的。
來看一個例子:
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在上例中,<bookstore>和<book>都擁有元素內容,因為它們包含了其他元素。<author>只有文字內容,因為它
僅包含文字。在上例中,只有<book>元素擁有屬性(category="CHILDREN")。
(2)XML命名規則
XML元素必須遵循以下命名規則:
1)名稱可以含字母、數字以及其他的字元。
2)名稱不能以數字或者標點符號開始。
3)名稱不能以字元"xml"(或者XML、Xml)開始。
4)名稱不能包含空格。
可使用任何名稱,沒有保留的字詞。
(3)最佳命名習慣
最佳命名習慣的一些做法:
1)使名稱具有描述性。使用下劃線的名稱也很不錯。
2)名稱應當比較簡短,比如:<book_title>,而不是:<the_title_of_the_book>。
3)避免"-"字元。如果您按照這樣的方式進行命名:"first-name",一些軟體會認為你需要提取第一個單詞。
4)避免"."字元。如果您按照這樣的方式進行命名:"first.name",一些軟體會認為 "name" 是物件"first"的屬性。
5)避免 ":" 字元。冒號會被轉換為名稱空間來使用。
XML文件經常有一個對應的資料庫,其中的欄位會對應XML文件中的元素。有一個實用的經驗,即使用資料庫的
名稱規則來命名XML文件中的元素。
非英語的字母比如 éòá 也是合法的XML元素名,不過需要留意當軟體開發商不支援這些字元時可能出現的問題。
(4)XML元素是可擴充套件的
XML元素是可擴充套件,以攜帶更多的資訊。
請看下面這個 XML 例子:
<note>
<to>George</to>
<from>John</from>
<body>Don't forget the meeting!</body>
</note>
讓我們設想一下,我們建立了一個應用程式,可將<to>、<from>以及 <body>元素提取出來,併產生以下的輸
出:
MESSAGE
To: George
From: John
Don't forget the meeting!
想象一下,之後這個XML文件作者又向這個文件添加了一些額外的資訊:
<note>
<date>2008-08-08</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
那麼這個應用程式會中斷或崩潰嗎?不會。這個應用程式仍然可以找到XML文件中的<to>、<from>以及<body>元
素,併產生同樣的輸出。XML的優勢之一,就是可以經常在不中斷應用程式的情況進行擴充套件。