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