XML文件结构和基本语法
XML文件的結(jié)構(gòu)性?xún)?nèi)容,包括節(jié)點(diǎn)關(guān)系以及屬性?xún)?nèi)容等等。
元素是組成XML的最基本的單位,它由開(kāi)始標(biāo)記,屬性和結(jié)束標(biāo)記組成。
就是一個(gè)元素的例子,每個(gè)元素必須有一個(gè)元素名,元素可以若干個(gè)屬性以及屬性值。
 xml文件和html文件一樣,實(shí)際上是一個(gè)文本文件。顯然大家立刻就會(huì)明白,創(chuàng)建xml文件最普通的工具和html一樣,就是“記事本”了。
一個(gè)xml文件的例子
  現(xiàn)在我們暫且使用“記事本”來(lái)創(chuàng)建我們的xml文件吧。先看一個(gè)xml文件:
  例1
  〈?xml version="1.0" encoding="gb2312" ?〉
  〈參考資料〉
   〈書(shū)籍〉
  ??????〈名稱(chēng)〉xml入門(mén)精解〈/名稱(chēng)〉
  ??????〈作者〉張三〈/作者〉
  ??????〈價(jià)格 貨幣單位="人民幣"〉20.00〈/價(jià)格〉
   〈/書(shū)籍〉
   〈書(shū)籍〉
  ??????〈名稱(chēng)〉xml語(yǔ)法〈/名稱(chēng)〉
  ??????〈!--此書(shū)即將出版--〉
  ??????〈作者〉李四〈/作者〉
  ??????〈價(jià)格 貨幣單位="人民幣"〉18.00〈/價(jià)格〉
   〈/書(shū)籍〉
  〈/參考資料〉
  ——————————————————————
  這是一個(gè)典型的xml文件,編輯好后保存為一個(gè)以.xml為后綴的文件。我 們可以將此文件分為文件序言(prolog)和文件主體兩個(gè)大的部分。在此文件中的第一行即是文件序言。該行是一個(gè)xml文件必須要聲明的東西,而且也必 須位于xml文件的第一行,它主要是告訴xml解析器如何工作。其中,version是標(biāo)明此xml文件所用的標(biāo)準(zhǔn)的版本號(hào),必須要有;encoding 指明了此xml文件中所使用的字符類(lèi)型,可以省略,在你省略此聲明的時(shí)候,后面的字符碼必須是unicode字符碼(建議不要省略)。
  文件的其余部分都是屬于文件主體,xml文件的內(nèi)容信息存放在此。我們可以看到,文件主體是由開(kāi)始的〈參考資料〉和結(jié)束的〈/參考資料〉控制標(biāo)記組成,這 個(gè)稱(chēng)為xml文件的“根元素”;〈書(shū)籍〉是作為直屬于根元素下的“子元素”;在〈書(shū)籍〉下又有〈名稱(chēng)〉、〈作者〉、〈價(jià)格〉這些子元素。貨幣單位是〈價(jià) 格〉元素中的一個(gè)“屬性”,“人民幣”則是“屬性值”。元素與屬性的關(guān)系如圖1。
  〈!--此書(shū)即將出版--〉這一句同html一樣,是注釋,在xml文件里,注釋部分是放在“〈!--”與“--〉”標(biāo)記之間的部分。
  大家可以看到,xml文件是相當(dāng)簡(jiǎn)單的。同html一樣,xml文件也是由一系列的標(biāo)記組成,不過(guò),xml文件中的標(biāo)記是我們自定義的標(biāo)記,具有明確的含義,我們可以對(duì)標(biāo)記中的內(nèi)容的含義作出說(shuō)明。
xml文件的語(yǔ)法
  對(duì)xml文件有了初步的印象之后,我們就來(lái)詳細(xì)地談一談xml文件的語(yǔ)法。在講語(yǔ)法之前,我們必須要了解一個(gè)重要的概念,就是xml解析器(xml parse)。
1. xml解析器
  解析器的主要功能就是檢查xml文件是否有結(jié)構(gòu)上的錯(cuò)誤,剝離xml文件中的標(biāo)記,讀出正確的內(nèi)容,以交給下一步的應(yīng)用程序處理。xml是一種用來(lái)結(jié)構(gòu)化文件信息的標(biāo)記語(yǔ)言,xml規(guī)范中對(duì)于如何標(biāo)記文件的結(jié)構(gòu)性有一個(gè)詳細(xì)的法則,解析器就是根據(jù)這些法則寫(xiě)出來(lái)的軟件(多用java寫(xiě)成)。
2. well-formed的xml文件
  我們知道,xml必須是well-formed的,才能夠被解析器正確地解析出來(lái),顯示在瀏覽器中。那么什么是well-formed的xml文件呢?主要有下面幾個(gè)準(zhǔn)則,我們?cè)趧?chuàng)建xml文件的時(shí)候,必須滿足它們。
  首先,xml文件的第一行必須是聲明該文件是xml文件以及它所使用的xml規(guī)范版本。在文件的前面不能夠有其它元素或者注釋。
  第二,在xml文件中有且只能夠有一個(gè)根元素。我們的第一個(gè)例子中,〈參考資料〉... 〈/參考資料〉就是此xml文件的根元素。
xml文件中,用的大多都是自定義的標(biāo)記。
   第三,在xml文件中的標(biāo)記必須正確地關(guān)閉,也就是說(shuō),在xml文件中,控制標(biāo)記必 須有與之對(duì)應(yīng)的結(jié)束標(biāo)記。如:〈名稱(chēng)〉標(biāo)記必須有對(duì)應(yīng)的〈/名稱(chēng)〉結(jié)束標(biāo)記,不像html,某些標(biāo)記的結(jié)束標(biāo)記可有可無(wú)。如果在xml文件中遇到自成一個(gè) 單元的標(biāo)記,就是類(lèi)似于html 中的〈img src=.....〉的這些沒(méi)有結(jié)束標(biāo)記的時(shí)候,xml把它稱(chēng)為“空元素”,必須用這樣的寫(xiě)法:〈空元素名/〉,如果元素中含有屬性時(shí)寫(xiě)法則為:〈空元素 名 屬性名=“屬性值”/〉。
  第四,標(biāo)記之間不得交叉。在以前的html文件中,可以這樣寫(xiě):
  〈b〉〈h〉xxxxxxx〈/b〉〈/h〉,〈b〉和〈h〉
  標(biāo)記之間有相互重疊的區(qū)域,而在xml中,是嚴(yán)格禁止這樣標(biāo)記交錯(cuò)的寫(xiě)法,標(biāo)記必須以規(guī)則性的次序來(lái)出現(xiàn)。
  第五,屬性值必須要用“ ”號(hào)括起來(lái)。如第一個(gè)例子中的“1.0”、“gb2312”、“人民幣”。都是用“ ”號(hào)括起來(lái)了的,不能漏掉。
  第六,控制標(biāo)記、指令和屬性名稱(chēng)等英文要區(qū)分大小寫(xiě)。與html不同的是,在html中, 類(lèi)似〈b〉和〈b〉的標(biāo)記含義是一樣的,而在xml中,類(lèi)似〈name〉、〈name〉或〈name〉這樣的標(biāo)記是不同的。
   第七,我們知道,在html文件中,如果我們要瀏覽器原封不動(dòng)地將我們所輸入的東西顯示出來(lái),可以將這些東西放到〈pre〉〈/pre〉或者〈xmp〉 〈/xmp〉標(biāo)記中間。這對(duì)于我們創(chuàng)建html教學(xué)的網(wǎng)頁(yè)是必不可少的,因?yàn)榫W(wǎng)頁(yè)中要顯示html的源代碼。而在xml中,要實(shí)現(xiàn)這樣的功能,就必須使用 cdata標(biāo)記。在cdata標(biāo)記中的信息被解析器原封不動(dòng)地傳給應(yīng)用程序,并且不解析該段信息中的任何控制標(biāo)記。cdata區(qū)域是由:“〈! [cdata[”為開(kāi)始標(biāo)記,以“]]〉”為結(jié)束標(biāo)記。例如:例2中的源碼,除了“〈![cdata[”和“]]〉”符號(hào),其余的內(nèi)容解析器將原封不動(dòng)地 交給下游的應(yīng)用程序,即使cdata區(qū)域中的開(kāi)始和結(jié)尾的空白以及換行字符等,都同樣會(huì)被轉(zhuǎn)交(注意cdata是大寫(xiě)的字符)。
1??XML?的聲明
<?xml?version=”1.0”?standalone=”yes”?encoding=”UTF-8”?>
??? 這是一個(gè)XML處理指令。處理指令以?<??開(kāi)始,以??>?結(jié)束。<??后的第一個(gè)單詞是指令名,如xml,?代表XML聲明。
??? version, standalone, encoding?是三個(gè)特性,特性是由等號(hào)分開(kāi)的名稱(chēng)-數(shù)值對(duì),等號(hào)左邊是特性名稱(chēng),等號(hào)右邊是特性的值,用引號(hào)引起來(lái)。
幾點(diǎn)解釋:
- version:?說(shuō)明這個(gè)文檔符合1.0規(guī)范
- standalone:?說(shuō)明文檔在這一個(gè)文件里還是需要從外部導(dǎo)入, standalone?的值設(shè)為yes?說(shuō)明所有的文檔都在這一文件里完成?
- encoding:?指文檔字符編碼
2??XML?根元素定義
XML文檔的樹(shù)形結(jié)構(gòu)要求必須有一個(gè)根元素。根元素的起始標(biāo)記要放在所有其它元素起始標(biāo)記之前,根元素的結(jié)束標(biāo)記根放在其它所有元素的結(jié)束標(biāo)記之后,如
?
<?xml?version=”1.0”?standalone=”yes”?encoding=”UTF-8”?><Settings>
<Person>Zhang?San</Person>
</Settings>
?
3??XML元素
元素的基本結(jié)構(gòu)由?開(kāi)始標(biāo)記,數(shù)據(jù)內(nèi)容,結(jié)束標(biāo)記組成,如
<Person>??<Name>Zhang?San</Name>
??<Sex>Male</Sex>
</Person>
需要注意的是:
- 元素標(biāo)記區(qū)分大小寫(xiě),<Name>?與?<name>是兩個(gè)不同的標(biāo)記
- 結(jié)束標(biāo)記必須有反斜杠,如?</Name>
XML元素標(biāo)記命名規(guī)則如下:
- 名字中可以包含字母,數(shù)字及其它字母
- 名字不能以數(shù)字或下劃線開(kāi)頭
- 名字不能用xml開(kāi)頭
- 名字中不能包含空格和冒號(hào)
4??XML中的注釋
XML中注釋如下:
<!--?this?is?comment?-->
需要注意的是:
- 注釋中不要出現(xiàn)“--”或“-”
- 注釋不要放在標(biāo)記中
- 注釋不能嵌套?
5??PI ?(Processing Instruction)
PI?指?Processing Instruction,?處理指令。PI以“<?”開(kāi)頭,以“?>”結(jié)束,用來(lái)給下游的文檔傳遞信息。
例子表明這個(gè)XML文檔用core.css控制顯示。
?
6??PCDATA?
? #PCDATA:?specifies that an element will contain parsed character data.
? 舉例說(shuō)明PCDATA的用法,?其中movies.xml?存儲(chǔ)電影內(nèi)容數(shù)據(jù),movies.dtd對(duì)movies.xml進(jìn)行驗(yàn)證。
示例文件(movies.dtd)
<?xml?version="1.0"?encoding="GB2312"?><!ELEMENT?movies?(id,?name,?brief,?time)>
<!ATTLIST?movies?type?CDATA?#REQUIRED>
<!ELEMENT?id?(#PCDATA)>
<!ELEMENT?name?(#PCDATA)>
<!ELEMENT?brief?(#PCDATA)>
<!ELEMENT?time?(#PCDATA)>
id, name, brief, time只能包含非標(biāo)記文本(不能有自己的子元素)。
XML文件如下所示(movies.xml):
<!DOCTYPE?movies?SYSTEM?"movies.dtd">
<movies?type="動(dòng)作片">
????<id>1</id>
????<name>致命搖籃</name>
????<brief>李連杰最新力作</brief>
????<time>2003</time>
</movies>
?
7??CDATA
CDATA用于需要把整段文本解釋成純字符數(shù)據(jù)而不是標(biāo)記的情況。當(dāng)一些文本中包含很多“<”,“>”,“&”,“””等字符而非標(biāo)記時(shí),CDATA會(huì)非常有用。
<![CDATA[
??<Person>
??????<Name>ZhangSan</Name>
??????<Sex>Male</Sex>
??</Person>
]]>
</Example>
以“<![CDATA[” 開(kāi)始,以“]]>”結(jié)束。注意,在CDATA段中不要出現(xiàn)結(jié)束定界符“]]>”。
8??Entities(實(shí)體)
Entities(實(shí)體)是XML的存儲(chǔ)單元,一個(gè)實(shí)體可以是字符串,文件,數(shù)據(jù)庫(kù)記錄等。實(shí)體的用處主要是為了避免在文檔中重復(fù)輸入,我們可以為一個(gè)文檔定義一個(gè)實(shí)體名,然后在文檔里引用實(shí)體名來(lái)代替這個(gè)文檔,XML解析文檔時(shí),實(shí)體名會(huì)被替換成相應(yīng)的文檔。
XML為五個(gè)字符定義了實(shí)體名:
?
| 實(shí)體 | 字符 | 
| < | <? | 
| > | >? | 
| & | & | 
| " | “ | 
| ' | ‘ | 
?
?
定義并引用實(shí)體的示例:
??<!ENTITY?intro?"Here?is?some?comment?for?entity?of?XML">
]>
<example>
????<hello>&intro;</hello>
</example>
9??DOCTYPE?
“<!DOCTYPE[]>”緊隨XML聲明,包括所有實(shí)體的聲明,如下所示:
??declare?your?entities?here…
]>
<example>
????Body?of?document…
</example>
轉(zhuǎn)載于:https://www.cnblogs.com/klb561/p/9196515.html
總結(jié)
以上是生活随笔為你收集整理的XML文件结构和基本语法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: [3/21]Windows Server
- 下一篇: 非root用户ssh 执行 sudo远程
