曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費(fèi)者
和X M L文檔的內(nèi)容和結(jié)構(gòu)提供了標(biāo)準(zhǔn)函數(shù)。
5.1.1 XML文檔結(jié)構(gòu)
剛剛接觸X M L的開發(fā)人員常常會(huì)認(rèn)為X M L的主要目的是為文件中的信息片段命名,使之易
于被其他人理解。結(jié)果,這些新手開發(fā)的文檔簡直如同“標(biāo)記湯”—無序的數(shù)據(jù)元素列表與
有意義的標(biāo)記名稱組合在一起,但是它與普通的文件一樣都將信息置于同一層:
程序清單5 - 1
許多開發(fā)人員都忽略了X M L能夠顯示元素之間的關(guān)系這一特性—特別是表示兩個(gè)元素的
父子關(guān)系。如果將上述文件改寫為以下形式,將產(chǎn)生更好的效果:
程序清單5 - 2
在這種形式的文檔中,發(fā)票元素顯然包括四個(gè)行式項(xiàng)目子元素。它還簡化了文檔的搜索—
如果我們要尋找钚的所有訂單,可以查詢P R O D U C T屬性值為“P l u t o n i u m”的L I N E I T E M元素—
而不必依次查看每個(gè)P R O D U C T元素。
以上文檔結(jié)構(gòu)可以用圖5 - 1中的節(jié)點(diǎn)樹表示,它顯示了所有元素以及它們之間的相互關(guān)系。
如果要給文本文件中的發(fā)票增加行式項(xiàng)目,必須讀取文件直至發(fā)票的最后一個(gè)行式項(xiàng)目的
末尾,插入新的行式項(xiàng)目文本,然后繼續(xù)處理文檔的后續(xù)部分。正如你所料,這種技術(shù)很快會(huì)
變得非常棘手,特別是當(dāng)節(jié)點(diǎn)樹變得越來越深時(shí)。然而,如果你能夠根據(jù)樹結(jié)構(gòu)以節(jié)點(diǎn)形式對
文檔進(jìn)行操作,添加行式項(xiàng)目就輕而易舉了—只需創(chuàng)建新的L I N E I T E M節(jié)點(diǎn),并將它作為
I N V O I C E節(jié)點(diǎn)的子節(jié)點(diǎn)。
圖5-1
這就是D O M的工作原理。
當(dāng)你使用D O M對X M L文本文件進(jìn)行操作時(shí),它首先要解析文件,將文件分解為獨(dú)立的元素、
屬性和注釋等。然后,它以節(jié)點(diǎn)樹的形式(在內(nèi)存中)創(chuàng)建X M L文件的表示。此后,開發(fā)人員
可以通過節(jié)點(diǎn)樹訪問文檔的內(nèi)容,并根據(jù)需要修改文檔。
事實(shí)上, D O M執(zhí)行了更進(jìn)一步的操作,它將文檔中的每個(gè)項(xiàng)目看作節(jié)點(diǎn)—元素、屬性、
注釋、處理指令,甚至構(gòu)成屬性的文本。因此,對于我們上面的例子, D O M實(shí)際上會(huì)將文檔表
示為圖5 - 2所示的形式。
112使用XML 高級編程
下載
D O M提供了強(qiáng)大的接口集合,以簡化對D O M節(jié)點(diǎn)樹的操作。
圖5-2
5.1.2 為何使用DOM
提到訪問X M L文件,D O M永遠(yuǎn)只能算作可選的訪問方法之一。與其他用于產(chǎn)生X M L文檔的
機(jī)制相比,例如:直接向一個(gè)流寫入,使用D O M有以下幾點(diǎn)優(yōu)越性:
• DOM能夠保證正確的語法和格式正規(guī)性。
• DOM能夠從語法中提取內(nèi)容。
• DOM能夠簡化內(nèi)部文檔操作。
• DOM能夠貼切地反映典型的層次數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫的結(jié)構(gòu)。
讓我們依次分析這幾個(gè)優(yōu)點(diǎn)。
1. DOM能夠保證正確的語法和格式正規(guī)性
由于D O M將文本文件轉(zhuǎn)化為抽象的節(jié)點(diǎn)樹表示,因此能夠完全避免無結(jié)束標(biāo)記和不正確的
標(biāo)記嵌套等問題。使用D O M操作X M L文檔時(shí),開發(fā)人員不必?fù)?dān)心文檔的文本表示—只需要關(guān)
注父子關(guān)系和相關(guān)的信息。另外, D O M能夠避免文檔中不正確的父子關(guān)系。例如,一個(gè)A t t r對
象永遠(yuǎn)也不能成為另一個(gè)A t t r對象的父對象。
2. DOM能夠從語法中提取內(nèi)容
由D O M創(chuàng)建的節(jié)點(diǎn)樹是X M L文件內(nèi)容的邏輯表示—它顯示了文件提供的信息,以及它們
之間的關(guān)系,而不受限于X M L語法。例如,節(jié)點(diǎn)樹蘊(yùn)含的信息可以用于更新關(guān)系數(shù)據(jù)庫,或者
第5章文檔對象模型使用113 下載
文檔元素: INVOICE
屬性: C U S TO M E R
屬性: A D D R E S S
屬性: C I T Y
屬性: STATE
屬性: Z i p
元素: LINEITEM
元素: LINEITEM
元素: LINEITEM
元素: LINEITEM
屬性: UNITS
屬性: PRODUCT
屬性: UNITS
屬性: PRODUCT
屬性: UNITS
屬性: UNITS
屬性: PRODUCT
屬性: PRODUCT
文本: "142 Evergreen
Terrace"
文本: "Springfield"
文本: "VA"
文本: "00000"
文本: "Plutonium"
文本: "10"
文本: "Donuts"
文本: "937"
文本: "Beer"
文本: "1028"
文本: "Peanuts"
文本: "1"
文本: "Homer J.
Simpson"
創(chuàng)建H T M L頁面—開發(fā)人員不必糾纏于X M L語法規(guī)范。
3. DOM能夠簡化內(nèi)部文檔操作
就修改X M L文件的結(jié)構(gòu)而言,使用D O M比使用傳統(tǒng)的文件操作機(jī)制更加簡單。正如我們在
前面的例子中所描述的,利用D O M在文檔中增加元素非常簡便。另外,你可以通過幾條命令執(zhí)
行全局性操作(例如:從文檔中刪除具有特定標(biāo)記名稱的所有元素),而不必采用繁瑣的方法
—首先對文件進(jìn)行掃描,然后刪除相關(guān)的標(biāo)記。
4. DOM能夠貼切地反映典型的層次數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫的結(jié)構(gòu)
D O M表示數(shù)據(jù)元素關(guān)系的方式非常類似于現(xiàn)代層次型和關(guān)系型數(shù)據(jù)庫表示信息的方法。這
使得利用D O M在數(shù)據(jù)庫和X M L文件之間移動(dòng)信息變得相當(dāng)簡單。
大部分?jǐn)?shù)據(jù)庫都使用“雪花”結(jié)構(gòu)表示層次型信息,數(shù)據(jù)庫中的信息從中心“頂級”表向
外輻射,類似于車輪的車條(參見圖5 - 3)。
圖5-3
注意,每個(gè)客戶可能有多張發(fā)票,而且每張發(fā)票可能包含多個(gè)行式項(xiàng)目。為了支持這種行
為,X M L允許我們包含一個(gè)子元素的多個(gè)拷貝。上圖中的每個(gè)元素基本上都對應(yīng)著一張表,每
張表都包含多列(這些列在X M L中作為屬性出現(xiàn))。
上圖的結(jié)構(gòu)等價(jià)于以下X M L文件:
程序清單5 - 3
114使用XML 高級編程
下載
利用D O M建立文檔的樹結(jié)構(gòu)簡化了系統(tǒng)之間的信息傳遞。
5.1.3 DOM規(guī)范
與其他I n t e r n e t標(biāo)準(zhǔn)一樣, D O M規(guī)范也是由W 3 C維護(hù)的。在編寫本書時(shí), W 3 C提出了兩個(gè)
D O M文檔—Level 1和Level 2文檔。
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(48)