XML文件的結構性內容,包括節點關系以及屬性內容等等。
元素是組成XML的最基本的單位,它由開始標記,屬性和結束標記組成。
就是一個元素的例子,每個元素必須有一個元素名,元素可以若干個屬性以及屬性值。
xml文件和html文件一樣,實際上是一個文本文件。顯然大家立刻就會明白,創建xml文件最普通的工具和html一樣,就是“記事本”了。
一個xml文件的例子
現在我們暫且使用“記事本”來創建我們的xml文件吧。先看一個xml文件:
例1
〈?xml version="1.0" encoding="gb2312" ?〉
〈參考資料〉
〈書籍〉
〈名稱〉xml入門精解〈/名稱〉
〈作者〉張三〈/作者〉
〈價格 貨幣單位="人民幣"〉20.00〈/價格〉
〈/書籍〉
〈書籍〉
〈名稱〉xml語法〈/名稱〉
〈!--此書即將出版--〉
〈作者〉李四〈/作者〉
〈價格 貨幣單位="人民幣"〉18.00〈/價格〉
〈/書籍〉
〈/參考資料〉
——————————————————————
這是一個典型的xml文件,編輯好后保存為一個以.xml為后綴的文件。我 們可以將此文件分為文件序言(prolog)和文件主體兩個大的部分。在此文件中的第一行即是文件序言。該行是一個xml文件必須要聲明的東西,而且也必 須位於xml文件的第一行,它主要是告訴xml解析器如何工作。其中,version是標明此xml文件所用的標准的版本號,必須要有;encoding 指明了此xml文件中所使用的字符類型,可以省略,在你省略此聲明的時候,后面的字符碼必須是unicode字符碼(建議不要省略)。
文件的其余部分都是屬於文件主體,xml文件的內容信息存放在此。我們可以看到,文件主體是由開始的〈參考資料〉和結束的〈/參考資料〉控制標記組成,這 個稱為xml文件的“根元素”;〈書籍〉是作為直屬於根元素下的“子元素”;在〈書籍〉下又有〈名稱〉、〈作者〉、〈價格〉這些子元素。貨幣單位是〈價 格〉元素中的一個“屬性”,“人民幣”則是“屬性值”。元素與屬性的關系如圖1。
〈!--此書即將出版--〉這一句同html一樣,是注釋,在xml文件里,注釋部分是放在“〈!--”與“--〉”標記之間的部分。
大家可以看到,xml文件是相當簡單的。同html一樣,xml文件也是由一系列的標記組成,不過,xml文件中的標記是我們自定義的標記,具有明確的含義,我們可以對標記中的內容的含義作出說明。
xml文件的語法
對xml文件有了初步的印象之后,我們就來詳細地談一談xml文件的語法。在講語法之前,我們必須要了解一個重要的概念,就是xml解析器(xml parse)。
1. xml解析器
解析器的主要功能就是檢查xml文件是否有結構上的錯誤,剝離xml文件中的標記,讀出正確的內容,以交給下一步的應用程序處理。xml是一種用來結構化文件信息的標記語言,xml規范中對於如何標記文件的結構性有一個詳細的法則,解析器就是根據這些法則寫出來的軟件(多用java寫成)。
2. well-formed的xml文件
我們知道,xml必須是well-formed的,才能夠被解析器正確地解析出來,顯示在瀏覽器中。那么什么是well-formed的xml文件呢?主要有下面幾個准則,我們在創建xml文件的時候,必須滿足它們。
首先,xml文件的第一行必須是聲明該文件是xml文件以及它所使用的xml規范版本。在文件的前面不能夠有其它元素或者注釋。
第二,在xml文件中有且只能夠有一個根元素。我們的第一個例子中,〈參考資料〉... 〈/參考資料〉就是此xml文件的根元素。
xml文件中,用的大多都是自定義的標記。
第三,在xml文件中的標記必須正確地關閉,也就是說,在xml文件中,控制標記必 須有與之對應的結束標記。如:〈名稱〉標記必須有對應的〈/名稱〉結束標記,不像html,某些標記的結束標記可有可無。如果在xml文件中遇到自成一個 單元的標記,就是類似於html 中的〈img src=.....〉的這些沒有結束標記的時候,xml把它稱為“空元素”,必須用這樣的寫法:〈空元素名/〉,如果元素中含有屬性時寫法則為:〈空元素 名 屬性名=“屬性值”/〉。
第四,標記之間不得交叉。在以前的html文件中,可以這樣寫:
〈b〉〈h〉xxxxxxx〈/b〉〈/h〉,〈b〉和〈h〉
標記之間有相互重疊的區域,而在xml中,是嚴格禁止這樣標記交錯的寫法,標記必須以規則性的次序來出現。
第五,屬性值必須要用“ ”號括起來。如第一個例子中的“1.0”、“gb2312”、“人民幣”。都是用“ ”號括起來了的,不能漏掉。
第六,控制標記、指令和屬性名稱等英文要區分大小寫。與html不同的是,在html中, 類似〈b〉和〈b〉的標記含義是一樣的,而在xml中,類似〈name〉、〈name〉或〈name〉這樣的標記是不同的。
第七,我們知道,在html文件中,如果我們要瀏覽器原封不動地將我們所輸入的東西顯示出來,可以將這些東西放到〈pre〉〈/pre〉或者〈xmp〉 〈/xmp〉標記中間。這對於我們創建html教學的網頁是必不可少的,因為網頁中要顯示html的源代碼。而在xml中,要實現這樣的功能,就必須使用 cdata標記。在cdata標記中的信息被解析器原封不動地傳給應用程序,並且不解析該段信息中的任何控制標記。cdata區域是由:“〈! [cdata[”為開始標記,以“]]〉”為結束標記。例如:例2中的源碼,除了“〈![cdata[”和“]]〉”符號,其余的內容解析器將原封不動地 交給下游的應用程序,即使cdata區域中的開始和結尾的空白以及換行字符等,都同樣會被轉交(注意cdata是大寫的字符)。
1 XML 的聲明

這是一個XML處理指令。處理指令以 <? 開始,以 ?> 結束。<? 后的第一個單詞是指令名,如xml, 代表XML聲明。
version, standalone, encoding 是三個特性,特性是由等號分開的名稱-數值對,等號左邊是特性名稱,等號右邊是特性的值,用引號引起來。
幾點解釋:
- version: 說明這個文檔符合1.0規范
- standalone: 說明文檔在這一個文件里還是需要從外部導入, standalone 的值設為yes 說明所有的文檔都在這一文件里完成
- encoding: 指文檔字符編碼
2 XML 根元素定義
XML文檔的樹形結構要求必須有一個根元素。根元素的起始標記要放在所有其它元素起始標記之前,根元素的結束標記根放在其它所有元素的結束標記之后,如





3 XML元素
元素的基本結構由 開始標記,數據內容,結束標記組成,如





需要注意的是:
- 元素標記區分大小寫,<Name> 與 <name>是兩個不同的標記
- 結束標記必須有反斜杠,如 </Name>
XML元素標記命名規則如下:
- 名字中可以包含字母,數字及其它字母
- 名字不能以數字或下划線開頭
- 名字不能用xml開頭
- 名字中不能包含空格和冒號
4 XML中的注釋
XML中注釋如下:

需要注意的是:
- 注釋中不要出現“--”或“-”
- 注釋不要放在標記中
- 注釋不能嵌套
5 PI (Processing Instruction)
PI 指 Processing Instruction, 處理指令。PI以“<?”開頭,以“?>”結束,用來給下游的文檔傳遞信息。

例子表明這個XML文檔用core.css控制顯示。
6 PCDATA
#PCDATA: specifies that an element will contain parsed character data.
舉例說明PCDATA的用法, 其中movies.xml 存儲電影內容數據,movies.dtd對movies.xml進行驗證。
示例文件(movies.dtd)








id, name, brief, time只能包含非標記文本(不能有自己的子元素)。
XML文件如下所示(movies.xml):









7 CDATA
CDATA用於需要把整段文本解釋成純字符數據而不是標記的情況。當一些文本中包含很多“<”,“>”,“&”,“””等字符而非標記時,CDATA會非常有用。








以“<![CDATA[” 開始,以“]]>”結束。注意,在CDATA段中不要出現結束定界符“]]>”。
8 Entities(實體)
Entities(實體)是XML的存儲單元,一個實體可以是字符串,文件,數據庫記錄等。實體的用處主要是為了避免在文檔中重復輸入,我們可以為一個文檔定義一個實體名,然后在文檔里引用實體名來代替這個文檔,XML解析文檔時,實體名會被替換成相應的文檔。
XML為五個字符定義了實體名:
實體 |
字符 |
< |
< |
> |
> |
& |
& |
" |
“ |
' |
‘ |
定義並引用實體的示例:







9 DOCTYPE
“<!DOCTYPE[]>”緊隨XML聲明,包括所有實體的聲明,如下所示:






