XML學(xué)習(xí)心得

前言

為什么我會突然學(xué)XML呢忽肛?我在學(xué)習(xí)用JSP寫Web后臺的時候,常常會看到“等價的XML語句”、“符合XML標(biāo)準(zhǔn)”等字眼乾翔,并且在我新建的JSP項目中也發(fā)現(xiàn)有很多的.xml文件,我很想知道這些.xml文件的作用以及與JSP(或者說是與Java)的聯(lián)系嗡呼,就試著開始學(xué)習(xí)XML了纸俭。

簡介

XML的全稱為可擴(kuò)展標(biāo)記語言(eXtensible Markup Language),很多人應(yīng)該都熟悉HTML(超文本標(biāo)記語言南窗, HyperText Markup Language)揍很。與HTML一樣,XML也是一種標(biāo)記語言万伤,是一種特殊的文本標(biāo)記窒悔。兩者在形式上很相似,比如都有類似這樣的符號:<xx>字符</xx>敌买,作用上也都能用來傳輸與顯示數(shù)據(jù)简珠。下面是一個簡單的XML文檔:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

XML與HTML的區(qū)別

1.在HTML中不區(qū)分大小寫,而XML對大小寫十分敏感必須嚴(yán)格區(qū)分:

<message>This is correct<message>
<Message>This is incorrect</message>

2.在HTML中聋庵,有時不嚴(yán)格膘融,如果上下文清楚地顯示出段落或者列表在何處結(jié)尾,那么就可以省略</p>或者</li>之類的結(jié)束標(biāo)簽:

<p>This is a paragraph.

<li>HTML
<li>XML

而在XML中祭玉,省略關(guān)閉標(biāo)簽是非法的氧映,所有元素都必須有關(guān)閉標(biāo)簽。而像<br />這種擁有單個標(biāo)簽而沒有匹配的結(jié)束標(biāo)簽的必須用一個/字符作為結(jié)尾:

<p>This is a paragraph.</p>
<br />

3.在HTML中脱货,常會看到?jīng)]有正確嵌套的元素:

<b><i>This text is bold and italic</b></i>

在XML中岛都,所有元素都必須彼此正確地嵌套:

<b><i>This text is bold and italic</i></b>

PS:元素是指從(且包括)開始標(biāo)簽直到(且包括)結(jié)束標(biāo)簽的部分。

以上面的代碼為例振峻,正確嵌套的即為由于<i>元素是在<b>元素內(nèi)打開的臼疫,那么它必須在<b>元素內(nèi)關(guān)閉

4.在HTML中铺韧,引導(dǎo)屬性值的引號是可用可不用的多矮。在XML中,屬性值必須被引號包圍:

<note date="12/11/2007">
<to>Tove</to>
<from>Jani</from>
</note>

5.HTML會把多個連續(xù)的空格字符合并為一個哈打。在XML中塔逃,文檔中的空格不會被刪減。

6.XML文檔形成一種樹結(jié)構(gòu)料仗。XML 文檔必須有一個元素是所有其他元素的父元素湾盗,該元素稱為根元素。下面的代碼形成一種樹結(jié)構(gòu):

<root>
<child>
<subchild>.....</subchild>
</child>
</root>

7.HTML使用固有的標(biāo)簽立轧,而且都是預(yù)定義的格粪。常見的標(biāo)簽有:

  • 基本標(biāo)簽:<html><head>氛改、<body>
  • 文本標(biāo)簽:<font>帐萎、<p>
  • 列表標(biāo)簽:<ol><ul>胜卤、<li>
  • 表格標(biāo)簽:<table>疆导、<tr><td>

此外還有<img>(插入圖像標(biāo)簽)葛躏、<a>(超鏈接標(biāo)簽)澈段、<form>(表單標(biāo)簽)等。
XML中并沒有固有的標(biāo)簽舰攒,所有的標(biāo)簽都是自定義的而且可擴(kuò)展的(這也印證了XML名稱中的extensible)败富。以上文簡介中的代碼為例:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
  • <note>標(biāo)簽告訴讀者這是一個便簽
  • <to>標(biāo)簽告訴讀者便簽是寫給Tove
  • <from>標(biāo)簽告訴讀者便簽是Jani寫的
  • <heading>標(biāo)簽告訴讀者便簽的標(biāo)題為Reminder(即便簽有提醒的作用)
  • <body>標(biāo)簽告訴讀者便簽的內(nèi)容

這些標(biāo)簽都是作者在編寫XML文檔的過程中根據(jù)要編寫的數(shù)據(jù)的含義來定義的。

8.HTML和XML都有屬性摩窃。在XML中兽叮,屬性通常提供不屬于數(shù)據(jù)組成部分的信息:

 <file type="gif">computer.gif</file>

這個例子中,文件類型GIF與數(shù)據(jù)computer.gif無關(guān),但卻告訴讀者要用處理GIF文件的程序來處理computer.gif這個文件充择。
下面是兩個不同的XML文檔:

<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>

<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>

它們的區(qū)別在于第一個文檔中sex為元素person的一個屬性德玫,而第二個文檔中sex自身就是一個元素,它們都告訴讀者Anna Smith是一名女性椎麦。
很重要的提示:不要濫用屬性宰僧!請看下面一段代碼:

<note day="10" month="01" year="2008" to="Tove" 
from="Jani" heading="Reminder" body="Don't forget me this weekend!">
</note>

這并不是XML正確的使用方式!
還有一種情況就是針對元數(shù)據(jù)的屬性:

<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not!</body>
</note>
</messages>

這里的屬性id僅僅是一個標(biāo)識符观挎,用于標(biāo)識不同的便簽note琴儿,它并不是便簽中數(shù)據(jù)的組成部分。
XML中并沒有明確規(guī)定什么時候該用元素嘁捷,什么時候該用屬性造成,因此建議大家盡量避免使用屬性。如果需要存儲的信息感覺起來很像數(shù)據(jù)雄嚣,那么請使用元素晒屎,而那些元數(shù)據(jù)(有關(guān)數(shù)據(jù)的數(shù)據(jù))則應(yīng)當(dāng)存儲為屬性。

最重要的區(qū)別(自我認(rèn)為)

  • XML被設(shè)計用來存儲和傳輸數(shù)據(jù)缓升,其焦點(diǎn)是數(shù)據(jù)的內(nèi)容鼓鲁。
  • HTML被設(shè)計用來顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀港谊。

通俗地說就是HTML旨在顯示數(shù)據(jù)骇吭,而XML旨在傳輸數(shù)據(jù)。
還是以上文簡介中的代碼為例:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

想要單純地列舉出便簽寫給誰歧寺、便簽誰寫的燥狰、便簽的標(biāo)題、便簽的內(nèi)容這些數(shù)據(jù)斜筐,用HTML做一個無序列表就能實(shí)現(xiàn):

<html>
<head>
<title>note</title>
</head>
<body>
<li>Tove</li>
<li>Jani</li>
<li>Reminder</li>
<li>Don't forget me this weekend!</li>
</body>
</html>

這段代碼運(yùn)行起來是這樣的效果:

note.html運(yùn)行效果圖

現(xiàn)在我想問龙致,單看這張圖,能知道這個便簽是誰寫的嗎顷链?是Tove還是Jani净当?或者可能這個便簽是寫給Tove和Jani兩個人的,也許只有文檔的作者自己知道≡塘剩現(xiàn)實(shí)生活中還會有更復(fù)雜的例子,比如記錄家庭成員關(guān)系的文檔俘闯、記錄某件商品價格變動的文檔潭苞,如果用HTML做成無序列表一一列舉出來的話,就會出現(xiàn)一大串人名真朗、一大串?dāng)?shù)字此疹,沒有其他任何的解釋信息,我想也只有作者能看懂這些文檔吧。
這就是HTML的作用蝗碎,把數(shù)據(jù)顯示出來湖笨,怎么好看就怎么顯示。顯示的方式有很多種蹦骑,例如用文本慈省、列表、表格等眠菇,但顯示出的數(shù)據(jù)內(nèi)容并沒有改變边败,只是外觀發(fā)生了改變。
但XML就不一樣捎废,我們可以用XML編寫出下面兩個文檔:

<family>
<grandfather>Jack</grandfather>
<grandmother>Betty</grandmother>
<father>Mike</father>
<mother>Jessie</mother>
<uncle>Felix</uncle>
<aunt>Anna</aunt>
<son>Tom</son>
<daughter>Amy</daughter>
<January></January>
</family>

<price>
<January>$35.00</January>
<February>$36.00</February>
<March>$35.60</March>
<April>$37.00</April>
<May>$38.00</May>
<June>$36.00</June>
</price>

通過以上兩個文檔笑窜,我們可以清楚地知道每個人名對應(yīng)的人物關(guān)系、每個價格對應(yīng)的月份登疗。
這就是XML的作用排截,作者在編寫XML文檔的過程中根據(jù)數(shù)據(jù)的含義定義和擴(kuò)展標(biāo)簽,這樣數(shù)據(jù)就和特定的標(biāo)簽聯(lián)系起來并存儲辐益,在傳輸?shù)倪^程中讀者通過這些標(biāo)簽?zāi)軌蛎靼讛?shù)據(jù)的含義断傲。
肯定會有人有疑問:為什么不在HTML中使用類似的<grandfather>、<January>這些標(biāo)簽?zāi)睾衫埃亢鼙秆藁冢琀TML沒有預(yù)定義這些標(biāo)簽,并且HTML中的標(biāo)簽不能擴(kuò)展女仰,只能使用預(yù)定義好的標(biāo)簽猜年。
又有人會說,我也可以用HTML將數(shù)據(jù)的含義顯示出來呀疾忍,就像這樣:

<html>
<head>
<title>note</title>
</head>
<body>
<li>to:Tove</li>
<li>from:Jani</li>
<li>heading:Reminder</li>
<li>body:Don't forget me this weekend!</li>
</body>
</html>

這確實(shí)是個很不錯的方法乔外,讀者也能看懂?dāng)?shù)據(jù)的含義。但如果編寫文檔的目的只是方便用戶在需要的時候查看文檔中存儲的數(shù)據(jù)然后關(guān)閉的話一罩,就沒有必要寫這么冗長杨幼、繁瑣的一段代碼了。利用XML編寫聂渊,幾行代碼就能搞定差购,而且用記事本打開.xml文件就能查看:

note.xml運(yùn)行效果圖

這就是XML比HTML優(yōu)秀的地方,代碼雖短汉嗽,卻能完整欲逃、清楚地顯示出數(shù)據(jù)及其含義,同時又方便查看饼暑,可以跨平臺使用稳析。

后記

作為兩種不同的語言洗做,HTML有它的好處,XML也有它的優(yōu)點(diǎn)彰居。我寫本文的目的并不是在這兩者中評一個孰優(yōu)孰劣诚纸,我只是想把一些XML的基礎(chǔ)語法和我自己對這門語言的理解與感悟分享給大家。每門語言就像不同的工具陈惰,用最合適的語言高效地編寫程序畦徘、完成項目,我覺得這才是一名程序員要努力做到的奴潘。

學(xué)習(xí)資料來源

菜鳥教程——XML教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旧烧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子画髓,更是在濱河造成了極大的恐慌掘剪,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奈虾,死亡現(xiàn)場離奇詭異夺谁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肉微,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門匾鸥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碉纳,你說我怎么就攤上這事勿负。” “怎么了劳曹?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵奴愉,是天一觀的道長。 經(jīng)常有香客問我铁孵,道長锭硼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任蜕劝,我火速辦了婚禮檀头,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘岖沛。我一直安慰自己暑始,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布婴削。 她就那樣靜靜地躺著蒋荚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪馆蠕。 梳的紋絲不亂的頭發(fā)上期升,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音互躬,去河邊找鬼播赁。 笑死,一個胖子當(dāng)著我的面吹牛吼渡,可吹牛的內(nèi)容都是我干的容为。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼寺酪,長吁一口氣:“原來是場噩夢啊……” “哼坎背!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寄雀,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤得滤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盒犹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懂更,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年急膀,在試婚紗的時候發(fā)現(xiàn)自己被綠了沮协。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡卓嫂,死狀恐怖慷暂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晨雳,我是刑警寧澤行瑞,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站悍募,受9級特大地震影響蘑辑,放射性物質(zhì)發(fā)生泄漏赔癌。R本人自食惡果不足惜池充,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一痊焊、第九天 我趴在偏房一處隱蔽的房頂上張望溺森。 院中可真熱鬧癣朗,春花似錦堂油、人聲如沸溜歪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豁翎。三九已至,卻和暖如春隅忿,著一層夾襖步出監(jiān)牢的瞬間心剥,已是汗流浹背邦尊。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留优烧,地道東北人蝉揍。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像畦娄,于是被迫代替她去往敵國和親又沾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容