明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

XML基礎(chǔ)基礎(chǔ)(一)

[摘要]基本XML討論xml文件以前我們先看一個例子:<person> Alan Turing</person>這就是一個標(biāo)記完好的xml文件,<person>和<...
基本XML

討論xml文件以前我們先看一個例子:

<person>

Alan Turing

</person>

這就是一個標(biāo)記完好的xml文件,<person>和</person>分別是開始標(biāo)記和結(jié)束標(biāo)記。

l 開始標(biāo)記:以<開始,以>結(jié)束,中間是標(biāo)記名稱。

l 結(jié)束標(biāo)記:以</開始,以>結(jié)束,中間是標(biāo)記名稱。

注意:開始標(biāo)記和結(jié)束標(biāo)記對應(yīng)的標(biāo)記名稱必須相同,但是具體使用什么作為名稱就沒有規(guī)定,這個和html是不同的(html的標(biāo)記名是若干個確定的),你可以使用person來標(biāo)記一個人,使用cat來標(biāo)記一只貓。

標(biāo)記中間的Alan Turing就是數(shù)據(jù),其中Alan和Turing之間的空格也是數(shù)據(jù),也就是說標(biāo)記里面的數(shù)據(jù)中的空格不會別忽略。

有時(shí)候我們也許需要沒有任何數(shù)據(jù)的元素(元素指開始標(biāo)記和結(jié)束標(biāo)記之間的內(nèi)容,包含開始標(biāo)記和結(jié)束標(biāo)記,比如上面提到的例子就是一個元素),例如下面的:

<person></person>

這是一個空標(biāo)記,但是我們有另外更簡捷的標(biāo)記表示空標(biāo)記:

<person/>

注意:xml是區(qū)分大小寫的,這與html不同。<Person>和<PERSON>是不同標(biāo)記,比如你有一個元素以<person>開始,那么你就不能使用</ Person >作為結(jié)束標(biāo)記。

上面的例子指含有一個元素,我們現(xiàn)在給出一個復(fù)雜點(diǎn)的例子,然后給出xml樹的概念。

<person>
<name>

<first_name>Alan</first_name>

<last_name>Turing</last_name>

</name>

<profession>computer scientist</profession>

<profession>mathematician</profession>

<profession>cryptographer</profession>

</person>

顯然上面的例子外層仍然是一個person元素,但是與先前不同的是這個元素含有4個子元素,1個name元素和3個profession元素。我們稱person是name的父元素,顯然他也是profession的父元素,同樣我們可以看到name是first_name和last_name的父元素。

上面的例子我們發(fā)現(xiàn)標(biāo)記進(jìn)行了嵌套,這是允許的。但是重疊標(biāo)記是非法的,比如:
<strong><em>this common example from HTML</strong></em>

應(yīng)該是:

<strong><em>this common example from HTML</em></strong>

根據(jù)上面的例子中父子元素的關(guān)系以及注意到任何xml文件只能且只能含有一個根元素(也就是沒有父元素的元素)看起來很象一個樹,如圖:




現(xiàn)在我們給出一個混合數(shù)據(jù)的xml文件的例子,

<biography>
<name><first_name>Alan</first_name> <last_name>Turing</last_name>
</name> was one of the first people to truly deserve the name
<emphasize>computer scientist</emphasize>. Although his contributions
to the field are too numerous to list, his best-known are the
eponymous <emphasize>Turing Test</emphasize> and
<emphasize>Turing Machine</emphasize>.

<definition>The <term>Turing Test</term> is to this day the standard
test for determining whether a computer is truly intelligent. This
test has yet to be passed. </definition>

<definition>The <term>Turing Machine</term> is an abstract finite
state automaton with infinite memory that can be proven equivalent
to any any other finite state automaton with arbitrarily large memory.
Thus what is true for a Turing machine is true for all equivalent
machines no matter how implemented.
</definition>

<name><last_name>Turing</last_name></name> was also an accomplished
<profession>mathematician</profession> and
<profession>cryptographer</profession>. His assistance
was crucial in helping the Allies decode the German Enigma
machine. He committed suicide on <date><month>June</month>
<day>7</day>, <year>1954</year></date> after being
convicted of homosexuality and forced to take female
hormone injections.
</biography>
上面的例子我不作解釋,但是你要知道他是一個合法的xml文件,也就是說標(biāo)記和內(nèi)容可以混排。但是這樣格式的xml文件在程序的處理上就很麻煩,所以不推薦使用。

接著我們談?wù)剬傩裕ˋttributes)?蠢樱

<person born="1912-06-23" died="1954-06-07">

Alan Turing

</person>

其中紅色標(biāo)記的born和died就是屬性。其中born是屬性名,1912-06-23是屬性值,屬性值是用”筐起來的,當(dāng)然也可以用單引號’筐起來。

<person died = '1954-06-07' born = '1912-06-23' >

Alan Turing

</person>

使用單引號的作用是你可以在屬性的值里面添加雙引號。

到這里我們發(fā)現(xiàn)一個問題:

<person>

<name first="Alan" last="Turing"/>

<profession value="computer scientist"/>

<profession value="mathematician"/>

<profession value="cryptographer"/>

</person>

這個例子中我在person元素里面添加了4個子元素,每個元素有自己的屬性,以及對應(yīng)的值,然后這4個元素都是空元素。對照前面我們給出的對應(yīng)的例子,你覺得是把值限定在屬性里面好還是直接放在標(biāo)記之間好呢?這是一個爭論不休的問題,我的看法是由你自己定,看哪個爽就使用哪個。但是要注意對同一個元素,他不能同時(shí)含有幾個相同名稱的屬性。

<person born="1912-06-23" born="1954-06-07">

Alan Turing

</person>

上面的是非法的xml文件。

接著我們看看特殊字符帶來的問題。由于<和>是作為標(biāo)記使用的,所以一般情況下我們不能在數(shù)據(jù)部分直接包含<和>,而是使用&lt;和&gt; ,其實(shí)這個問題在html里面就有了,處理方式也是和html一樣,比如&我們使用&amp; ,雙引號”使用&quot;等。

再看看注釋,方法和html是一樣的:

<!-- 左邊的是注釋開始標(biāo)記,右邊的是結(jié)束標(biāo)記 -->

但是注意注釋的內(nèi)容不能包含 -- ,同時(shí)注釋里面的任何標(biāo)記都會被忽略!同時(shí)需要注意的是注釋不能出現(xiàn)在一個元素的標(biāo)記里面。



現(xiàn)在我們從整體上來看xml:

1. xml聲明

所有的xml文檔可能(也應(yīng)該。┯梢粋xml聲明(XML Declaration)開始。雖然文檔聲

明使用的是同指令處理類似的語法,但從技術(shù)上講,根據(jù)X M L推薦標(biāo)準(zhǔn)它們并不是一回事,因

為聲明是xml中的保留部分。

<?xml version="1.0" encoding="ASCII" standalone="yes"?>

<person>

Alan Turing

</person>

如果包括X M L聲明,它必須處在文檔最前面—前面不允許有任何空白或注釋。嚴(yán)格地講,

在X M L當(dāng)中這種聲明并不是必須的,但我們后面會看到,當(dāng)處理文檔時(shí),它確實(shí)會起到一些優(yōu)化的作用。

這些屬性已經(jīng)在XML 1.0規(guī)范中做出了定義:

? version—不能省略;值必須為“ 1 . 0”;該屬性用來保證對X M L未來版本的支持。

? e n c o d i n g—可選;值必須是一種合法的字符編碼,例如“ U T F - 8”、“U T F - 1 6”或者

“I S O - 8 8 5 9 - 1”(即L a t i n - 1字符編碼)。所有X M L解析器都要求至少支持U T F - 8和U T F - 1 6。

如果沒有包含這個屬性,就假設(shè)是“ U T F - 8”或“ U T F - 1 6”編碼,這取決于開始的“< ? x m l”字符串的格式。

? s t a n d a l o n e—可選;值必須是“ y e s”或“n o”;如果是“y e s”就意味著所有必須的實(shí)體聲明都包含在文檔中,如果是“ n o”就意味著需要外部的D T D。DTD將在后面介紹。



最后給出好的xml的相關(guān)要求:

1. 每個開始標(biāo)記必須有一個結(jié)束標(biāo)記匹配

2. 標(biāo)記可以嵌套但是不能重疊

3. 每個xml文件只有一個根元素

4. 一個元素不能含有兩個相同名字的屬性

5. 注釋不能出現(xiàn)在元素標(biāo)記里面

6. 沒有<或者&等類似的字符出現(xiàn)在元素值或者屬性值里面