曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
程序清單5 - 7
126使用XML 高級編程
下載
在上面的代碼中,我們調用了4個J S c r i p t函數: i n i t i a l i z e B o o k ( ),u p d a t e B o o k I n f o ( ) ,
a d d A u t h o r ( )和a d d C a t e g o r y ( )。這些函數利用D O M初始化和修改文檔信息。表單由三組控件構成。
第一組是圖書常規信息的輸入框和更新按鈕(由于在我們的圖書X M L中圖書常規信息只能出現
一次)。第二組是用于添加圖書作者的表單(因為作者可以出現多次),最后一組是用于添加圖
書類別的表單。
下面我們將創建X M L數據島,它將包含已經完成的圖書:
在本例中,使用數據島作為通知Internet Explorer 5 的信號,說明要在代碼中操作名為
d o c B o o k的X M L文檔。注意,我們已經指定了X M L文檔的根對象,即:名為B o o k的空元素。當
然,也可以選擇在將數據島發送至客戶端之前不向其中寫入任何內容,或者僅僅添加一些初始
信息(如:圖書的I D)。
第5章文檔對象模型使用127 下載
代碼的下一部分包含用于操作圖書的腳本:
我們將d o c B o o k 指定為全局變量, 這樣訪問X M L 文檔時就不必使用全名
d o c u m e n t . a l l ( “ d o c B o o k ” ) . X M L D o c u m e n t 。這個語法是I E 5中新增的,它允許客戶端J S c r i p t使用
XML DOM操作—X M L D O M D o c u m e n t對象的所有功能。我們將在i n i t i a l i z e B o o k ( )函數中初始
化d o c B o o k變量的值,你應該記得這個函數是在< B O D Y >標記的o n l o a d事件中調用的:
在以上代碼中,我們首先初始化d o c B o o k變量,使之指向d o c B o o k文檔。然后,將文檔的
a s y n c屬性設置為f a l s e。它使得對文檔的所有操作都必須以同步方式執行—僅當操作完成后才
返回函數繼續執行。它能夠避免在文檔更新過程中訪問文檔(另外,你可以編寫一個事件處理
器等待o n d a t a a v a i l a b l e事件的觸發—但是如果不需要執行特別的事件處理操作,最好讓代碼處
于等待狀態)。最后,我們調用顯示D O M內容的函數—以普通格式顯示以及使用X S L樣式表顯
示。
我們還需要一個輔助函數。這個輔助函數根據元素名稱創建或替換指定父元素的相應子元
素。這樣,當我們的用戶決定將書名由“ XML for Professionals”改為“Professional XML”時,
就不會導致< B o o k >元素中突然出現了兩個< Ti t l e >子元素。
該函數從D O M中引入了一些新的屬性和方法。在繼續討論之前,先看看這些新屬性和新方
法。
c r e a t e E l e m e n t ( )方法作用于文檔,它用于實例化E l e m e n t對象。它唯一的參數是要創建的新
元素的名稱。方法將返回所創建的E l e m e n t對象。通過這種方式創建的E l e m e n t對象是孤立的;即:
它不與任何特定的父元素相關聯。需要通過a p p e n d C h i l d ( )等方法將該元素鏈接到X M L節點樹的
適當位置。
c r e a t e Te x t ( )方法作用于文檔,它用于創建Te x t對象。它唯一的參數是構成Te x t對象內容的文
本,方法返回所創建的Te x t對象。與c r e a t e E l e m e n t ( )方法類似,c r e a t e Te x t ( )創建的節點也是孤立
的,它需要依靠特定的方法添加到節點樹中。Te x t對象代表文檔中無格式的文本;通常,它們作
為E l e m e n t對象的子對象。例如,在下面這個簡短的代碼片段中:
代碼中的< B o o k >有子元素< Ti t l e > ;元素< Ti t l e > 有子對象< Te x t > ,它包含字符串
“Professional XML”。
a p p e n d C h i l d ( )方法作用于任何節點,它用于在兩個節點之間建立父子關系。被添加的元素
作為方法的參數,方法將返回被添加的節點。
128使用XML 高級編程
下載
g e t E l e m e n t B y Ta g N a m e ( )方法可以作用于任何節點,它用于在本節點的子元素中定位標記與
參數字符串匹配的元素。它返回N o d e L i s t對象,其中包含與查詢條件匹配的節點的無序集合。
r e p l a c e C h i l d ( )方法可以作用于任何節點,它將一個節點中的特定子節點替換為另一個子節
點。新舊節點都將作為方法的參數,方法將返回舊的(被刪除的)節點。
程序清單5 - 8
在以上代碼中,我們創建新的元素節點和文本節點,它們代表要添加的元素。然后,將文
本節點附加為元素節點的子節點。最后,檢查父節點中是否存在與新創建的元素節點名稱相同
的子節點。如果存在,將用新的子節點替換舊的子節點;否則,將新的子節點添加至父節點中。
下面,我們將實現用于更新文檔中圖書常規信息的函數:
程序清單5 - 9
第5章文檔對象模型使用129 下載
以上代碼獲取表單輸入控件中指定的值,并利用這些值創建新元素,然后將新元素添加到
文檔中,或者替換原來的子元素。
下面的函數用于添加圖書的作者:
程序清單5 - 1 0
該函數創建元素和文本對象,并在它們之間建立父子關系。然后,它檢查文檔中是否存在
容器元素< A u t h o r s >。如果不存在,函數創建該容器元素。最后,它將在函數開始處創建的元素
附加到新的< A u t h o r s >對象或已有的< A u t h o r s >對象中。而后,函數再次刷新文檔,更新樣式表
形式的圖書信息以及純X M L部分。
下面這個函數用于添加圖書的類別:
程序清單5 - 11
130使用XML 高級編程
下載
此時, X M L文檔僅僅以XML DOM節點樹的形式存在于內存中。為了讓用戶看到信息的變
化,我們需要展示文檔。下面這個函數正是完成這項功能,它使用樣式表和普通格式展示文檔
的內容:
程序清單5 - 1 2
使用文檔的x m l屬性,能夠得到整個文檔的純文本X M L輸出。這是大多數人對于X M L“文
件”的認識。需要注意的是, x m l屬性是M i c r o s o f t對D O M的擴展—W 3 C計劃在DOM Level 3中
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(53)