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