曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專(zhuān)營(yíng)店坑蒙拐騙欺詐消費(fèi)者
程序清單9 - 4 2
所以,J a v a S c r i p t中包含排序?qū)ο蟮男凶兂桑?br />
s e l e c t S i n g l e N o d e ( )返回的是屬性節(jié)點(diǎn),不是元素節(jié)點(diǎn)。每一個(gè)有一個(gè)或多個(gè)屬性的元素,在
文檔樹(shù)中,被轉(zhuǎn)化成有一個(gè)或多個(gè)屬性子節(jié)點(diǎn)的元素節(jié)點(diǎn)。所以, a t t r i b N o d e變量包含的是屬性
節(jié)點(diǎn)對(duì)象。
接下來(lái),我們通過(guò)標(biāo)題的順序來(lái)排序和顯示條目:
使用s o r t ( )函數(shù):
程序清單9 - 4 3
首先,屬性節(jié)點(diǎn)對(duì)象的值設(shè)成了' T I T L E '字符串。實(shí)際上,這個(gè)有效地修改了擴(kuò)展D O M。所
以這里代替用X S L修改X M L文檔,而是使用擴(kuò)展D O M—在運(yùn)行時(shí), X S L樣式表可能被擴(kuò)展
D O M和一段相應(yīng)的腳本修改。
第二行需要更多的解釋。首先,你可能會(huì)自問(wèn), B o o k l i s t對(duì)象是從哪里來(lái)的。這個(gè)對(duì)象是在
X S L腳本中使用下面的命令創(chuàng)建的:
352使用XML 高級(jí)編程
下載
如你所見(jiàn),當(dāng)創(chuàng)建一個(gè)< D I V >元素時(shí),我們就創(chuàng)建了一個(gè)名為B o o k l i s t的唯一標(biāo)識(shí)對(duì)象。這
是一個(gè)H T M L元素,用來(lái)接收X M L到H T M L轉(zhuǎn)換的結(jié)果。所以,當(dāng)下面的表達(dá)式被J a v a S c r i p t解
釋器執(zhí)行時(shí):
我們對(duì)初始的X M L文檔中的d o c u m e n t E l e m e n t對(duì)象調(diào)用了t r a n s f o r m N o d e ( )方法。這是一個(gè)
X S L的擴(kuò)展D O M,用來(lái)排序x s l S t y l e s h e e t變量。然后,結(jié)果被排序放在B o o k l i s t對(duì)象的
i n n e r H T M L屬性中。這個(gè)會(huì)引起H T M L文檔的刷新,從而造成顯示刷新。然后排序后的表顯示在
屏幕上(見(jiàn)圖9 - 2 5)。
圖9-25
表頭被設(shè)置了C S S樣式,用于指示每次光標(biāo)在表頭時(shí),瀏覽器顯示出一只小手。用戶習(xí)慣于
在可被點(diǎn)擊的東西上定義一只小手。每一列的表頭都同一個(gè)s o r t ( )函數(shù)相聯(lián),在這個(gè)例子中,行
為就像o n C l i c k事件的事件處理器。例如,如果用戶點(diǎn)擊了P r i c e列,那么排序函數(shù)被調(diào)用,使用
< o n c l i c k = " s o r t ( ' P R I C E ' ) " . . . >命令。s o r t ( )函數(shù)接收‘ P R I C E’字符串作為一個(gè)參數(shù),設(shè)置為
a t t r i b N o d e變量的值。實(shí)際上,這個(gè)就改變了X S L樣式表。改動(dòng)等于將下面的命令:
替換成:
同最初的X S L樣式表。在X S L擴(kuò)展D O M已經(jīng)被修改完畢,我們?cè)僖淮蔚剞D(zhuǎn)換了初始的X M L
文檔,使用改過(guò)的X S L樣式表,并且將這個(gè)轉(zhuǎn)換的結(jié)果作為HTML Booklist對(duì)象(如此命名是因
為< D I V >的i d)的i n n e r H T M L屬性的輸入。
所以,因?yàn)閄 S L文檔被轉(zhuǎn)換成一個(gè)樹(shù)狀命令(因?yàn)閿U(kuò)展D O M是對(duì)這棵樹(shù)提供的接口),就可
能使用這個(gè)接口修改X S L腳本。被修改的X S L腳本然后可以對(duì)原始文檔執(zhí)行一個(gè)不同的轉(zhuǎn)換。所
以,為了得到基于用戶交互的不同結(jié)果, X S L腳本可以在腳本語(yǔ)言中被修改。
9.6 XSL轉(zhuǎn)換與DOM轉(zhuǎn)換的比較
X S L與D O M轉(zhuǎn)換處理的一個(gè)最主要的不同之處是, X S L是一種公布語(yǔ)言,而不是過(guò)程語(yǔ)言。
第9章轉(zhuǎn)換XML使用353 下載
因?yàn)檫@樣, X S L描述的是轉(zhuǎn)換后的文檔狀態(tài)與初始文檔的關(guān)系。D O M則是一種A P I,它允許對(duì)
樹(shù)狀命令進(jìn)行操作。
我們看到前面WSH VBScript使用D O M來(lái)達(dá)到與我們使用X S LT樣式表同樣的轉(zhuǎn)換結(jié)果。但
是我們可以說(shuō),更精細(xì)的轉(zhuǎn)換引擎(由D O M 1或D O M 2規(guī)范所命令的)比X S LT來(lái)說(shuō)限制更多。
這主要是因?yàn)椋?D O M 1和D O M 2規(guī)范沒(méi)有集成X P a t h表達(dá)式合并為到達(dá)一個(gè)特別的樹(shù)狀命令節(jié)點(diǎn)
的能力。所以,在某種條件下,用D O M來(lái)轉(zhuǎn)換X M L文檔要比使用X S LT要困難得多。如果未來(lái)
的D O M規(guī)范版本包括了通過(guò)X P a t h表達(dá)式到達(dá)一個(gè)特別節(jié)點(diǎn)的能力,那么使用D O M可能像使用
X S LT一樣容易和有效。
如同我們?cè)谄渌腄 O M使用的例子中看到的,一個(gè)X S LT樣式表可以轉(zhuǎn)換一個(gè)X M L文檔為
H T M L。結(jié)果的H T M L文檔可以包含腳本,用于在后面操縱內(nèi)容的樹(shù)狀命令。腳本過(guò)程可以通過(guò)
用戶的動(dòng)作被觸發(fā),并且這些腳本可能包含使用DOM API的代碼來(lái)操縱與初始的X M L文檔相關(guān)
的X S LT文檔。這就是我們所做的,當(dāng)用戶在一個(gè)表頭點(diǎn)擊時(shí),我們改變一些X S LT元素的值
(存儲(chǔ)的值),來(lái)對(duì)這個(gè)列進(jìn)行排序。在這個(gè)例子中, D O M用于改變X M L元素的屬性值,并且由
于X S LT本身也是一個(gè)X M L文檔,它也可以使用DOM API進(jìn)行修改。這時(shí), D O M通過(guò)提供排序
向X S LT轉(zhuǎn)換加入值,而不必在腳本中包括排序代碼。
總之,我們可以說(shuō)在實(shí)際的技術(shù)狀態(tài)中, X S LT樣式表可以做得比使用DOM API腳本更易移
值。就像在開(kāi)始看到的—現(xiàn)實(shí)的D O M 1和D O M 2規(guī)范不包含任何裝入和保存X M L文檔的命令。
因?yàn)樗羞@些原因,最好使用X S LT樣式表來(lái)進(jìn)行轉(zhuǎn)換,而不是使用包含D O M命令的腳本。
9.7 小結(jié)
在這一章里,我們已經(jīng)看過(guò)了轉(zhuǎn)換X M L文檔命令。特別是,我們花費(fèi)了大量時(shí)間關(guān)注于
X S LT(X S L轉(zhuǎn)換)上。這需要X P a t h和X P o i n t e r的知識(shí),在第8章已經(jīng)學(xué)過(guò)了。
我們看到有幾個(gè)為什么需要轉(zhuǎn)換X M L文檔的原因。這些包括:
• 將X M L轉(zhuǎn)換為一種表式語(yǔ)言。
• 在X M L的不同詞匯表中進(jìn)行轉(zhuǎn)換。
• 生成動(dòng)態(tài)文檔。
X S LT實(shí)際上是一個(gè)巨大的專(zhuān)題,希望這一章能夠讓你習(xí)慣于這個(gè)特別規(guī)范的語(yǔ)法。而且關(guān)
于這個(gè)題目很可能將被寫(xiě)成一本書(shū)(的確,留意一個(gè)Wr o x出版社的《X S LT Programmer’s
R e f e r e n c e》,ISBN 1-861003-12-9),這個(gè)將讓你習(xí)慣可用的全部功能,并且在寫(xiě)你自已的轉(zhuǎn)換
樣式表時(shí)提供一個(gè)堅(jiān)實(shí)的基礎(chǔ)。
由于在X S LT規(guī)范完成之前,在I E 5中可用的實(shí)現(xiàn)就被介紹了,所以它們有一些不同,包括一
些擴(kuò)展。然而,也有一些可以用在你的應(yīng)用程序中的X S LT處理器:
• XT - http://www. j c l a r k . c o m / x m l / x t . h t m l。
• SAXON - http://users.iclway. c o . u k / m h k a y / s a x o n。
中國(guó)航空網(wǎng) m.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(116)