曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
圖5-9
第5章文檔對(duì)象模型使用139 下載
這個(gè)簡(jiǎn)單的例子說明了如何在服務(wù)器端利用D O M處理信息。例如,在線發(fā)票系統(tǒng)可以通過
F T P將發(fā)票文件放置到服務(wù)器上的某個(gè)目錄;每天早晨可以運(yùn)行預(yù)定的程序解析目錄中的所有文
件,將它們轉(zhuǎn)化為X M L,并存檔以備后用。或者,某個(gè)需要?jiǎng)討B(tài)查詢發(fā)票信息的程序可以從數(shù)
據(jù)庫中讀取適當(dāng)?shù)男畔ⅲ褂肈 O M將它轉(zhuǎn)化為X M L,并將生成的X M L返回給客戶端進(jìn)行處理。
2. 使用D O M修改信息
你可能已經(jīng)注意到在上面的例子中, I S B N的格式非常不好。通常, I S B N是以特定位置的連
字符分隔的,例如:
然而,我們?cè)谖募械玫降氖遣缓魏胃袷降募償?shù)字:
我們能夠通過在腳本中增加代碼解決這個(gè)問題。下面將在前面的例子中增加用于設(shè)定I S B N
格式的代碼。
當(dāng)文件關(guān)閉,已經(jīng)構(gòu)建XML DOM樹之后,添加以下代碼:
程序清單5 - 2 5
以上代碼在B o o k元素的子孫中搜索名為I S B N的元素。現(xiàn)在,我們知道每個(gè)I S B N元素有一個(gè)
子節(jié)點(diǎn)—包含格式不恰當(dāng)?shù)淖址奈谋竟?jié)點(diǎn)。我們讀取該元素的值,在適當(dāng)位置插入連字
符,用正確的格式更新元素值。需要注意的是,我們遍歷了N o d e L i s t中的所有元素,因此如果存
在多個(gè)I S B N元素,以上代碼塊不會(huì)遺漏任何元素—這使得它非常適于修改大型X M L文件中深
層嵌套的元素。
現(xiàn)在,D i s p l a y B o o k . a s p文件的輸出將如圖5 - 1 0所示。
3. 使用D O M刪除元素
D O M也可以用于從節(jié)點(diǎn)樹中刪除元素。比如, Kevin Wi l l i a m s不再是書的作者—但是所有
文件都仍然認(rèn)為他是書的作者。我們可以使用D O M刪除名為Kevin Wi l l i a m s的作者。
同樣,我們是以前面的例子為基礎(chǔ)的。
在我們添加的I S B N代碼之后,繼續(xù)插入以下代碼塊:
程序清單5 - 2 6
140使用XML 高級(jí)編程
下載
圖5-10
以上代碼在B o o k元素的子孫節(jié)點(diǎn)中掃描所有A u t h o r元素;并從父節(jié)點(diǎn)中刪除含文本K e v i n
Wi l l i a m s的子節(jié)點(diǎn)。值得注意的是,我們不需要更多的清除工作;甚至連節(jié)點(diǎn)本身仍然是有效的,
但是它不與其他任何節(jié)點(diǎn)相關(guān)聯(lián),因此它不會(huì)出現(xiàn)在生成的X M L中。
現(xiàn)在,D i s p l a y B o o k . a s p文件的輸出將如圖5 - 11所示。
4. 再談X M L流的產(chǎn)生
第5章文檔對(duì)象模型使用141 下載
讓我們回憶一下用于生成節(jié)點(diǎn)樹的X M L的遞歸子例程Wr i t e N o d e X M L ( ):
圖5-11
程序清單5 - 2 7
142使用XML 高級(jí)編程
下載
雖然這段代碼完全能夠應(yīng)付我們的例子,但是它幾乎不能處理其他可能出現(xiàn)的D O M變換形
式。盡管介紹能夠正確表達(dá)各種節(jié)點(diǎn)類型的函數(shù)超出了本書的討論范圍,但是我們不妨看看如
何表達(dá)屬性(這也是一個(gè)相當(dāng)重要的節(jié)點(diǎn)類型)。
由于屬性是特殊的節(jié)點(diǎn),它并不是與之關(guān)聯(lián)的元素節(jié)點(diǎn)的子節(jié)點(diǎn);而是位于元素的a t t r i b u t e s
屬性中。該屬性返回的N a m e d N o d e M a p能夠表達(dá)特定元素的所有屬性信息。我們將在原來的
Wr i t e N o d e X M L ( )函數(shù)中增加處理屬性的代碼:
程序清單5 - 2 8
現(xiàn)在,屬性的名稱-值對(duì)將嵌入元素的起始標(biāo)記中。為了將D O M的內(nèi)容完全表示為文件,我
們還需要處理注釋、處理指令和C D ATA部分等。
毫無疑問, D O M為訪問X M L文檔的內(nèi)容提供了簡(jiǎn)單靈活的方式。D O M可以用在客戶端或
服務(wù)器端,它能夠?qū) M L結(jié)構(gòu)進(jìn)行操作、添加或刪除。
5.4 DOM和XML的未來
X M L仍然處在早期開發(fā)階段。如果你在HTML 1.0規(guī)范發(fā)布時(shí)曾經(jīng)做過H T M L開發(fā),你就知
道迄今為止這種語言已經(jīng)發(fā)生了巨大的變化—X M L也可能出現(xiàn)同樣的情況。在本節(jié)中,我們
將展望D O M和X M L的發(fā)展趨勢(shì),以及它們將對(duì)我們產(chǎn)生的影響。
5.4.1 W3C的工作
W 3 C正在定義X M L和D O M。在編寫本書時(shí),DOM Level 1規(guī)范處于建議狀態(tài), DOM Level
2規(guī)范處于候選建議狀態(tài)。另外, W 3 C已經(jīng)開始討論DOM Level 3規(guī)范。在Level 3中,W 3 C準(zhǔn)備
將用于加載文檔和將X M L結(jié)構(gòu)保存為文件的機(jī)制標(biāo)準(zhǔn)化(許多特定的D O M實(shí)現(xiàn)已經(jīng)非正式地提
供了這些功能),另外它還將解決文檔有效性驗(yàn)證的問題。該版本還將標(biāo)準(zhǔn)化文檔的查看和格式
化機(jī)制。除了Level 3,W 3 C計(jì)劃增加用戶交互機(jī)制,例如:提示和查詢語言。
第5章文檔對(duì)象模型使用143 下載
5.4.2 應(yīng)用
致力于提供能夠訪問和修改X M L文件的工具的第三方開發(fā)商不計(jì)其數(shù)。這些開發(fā)商都希望
能夠充分利用D O M的功能。在許多實(shí)例中,這些工具構(gòu)成了D O M的外包裝,它使得開發(fā)人員能
夠在更高層訪問信息(而不是手工遍歷節(jié)點(diǎn)樹)。其中一個(gè)應(yīng)用是X P a t h—這是一種查詢語言,
它用于控制節(jié)點(diǎn)樹的遍歷和數(shù)據(jù)的獲取。D O M在今后一兩年內(nèi)可能有所變化,因而這些用于訪
問X M L文檔的工具也將隨之改變。
5.4.3 數(shù)據(jù)庫、模式和DOM
數(shù)據(jù)庫和X M L文檔之間的界限越來越窄。目前,已經(jīng)能夠通過查詢語言訪問X M L文檔,通
過X M L模式控制文檔內(nèi)容的類型,隨著這些技術(shù)的發(fā)展,數(shù)據(jù)庫和D O M之間的信息傳遞出現(xiàn)差
錯(cuò)的可能性越來越小。例如, M i c r o s o f t和O r a c l e已經(jīng)在他們的數(shù)據(jù)庫服務(wù)器應(yīng)用程序中內(nèi)置了
X M L支持。
5.5 小結(jié)
我們已經(jīng)看到D O M為遍歷構(gòu)成X M L文檔的節(jié)點(diǎn)樹以及獲取其中存儲(chǔ)的信息提供了自然的面
向?qū)ο蟮臋C(jī)制。特別是:
• DOM為處理X M L文檔提供了可編程的方法。
• DOM允許我們?cè)诳蛻舳撕头⻊?wù)器端修改X M L數(shù)據(jù)結(jié)構(gòu)。
• DOM為數(shù)據(jù)庫之間的信息傳遞提供了理想的機(jī)制。
• DOM在不同的平臺(tái)上可以有不同的實(shí)現(xiàn)方式。
• DOM是內(nèi)存密集型操作,它不適于處理大型X M L文件。
簡(jiǎn)而言之,讀取和操作X M L文檔時(shí),使用D O M將保證各種平臺(tái)之間獲得最大程度的互操作
性。然而,使用D O M并不一定是最佳策略,特別是對(duì)于非常大的文件。為了避免將整個(gè)文檔加
中國(guó)航空網(wǎng) m.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(55)