曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費(fèi)者
一些我們在本章前面討論的查詢需求。
利用X T來測試X S LT和XPa t h查詢
隨著X S LT和XPa t h的興起,然而常用的XML 庫如M i c r o s o f t和S U N的安裝使用都不完全支持
X S LT和XPa t h,這些工作草案只能稱為建議性的。M i c r o s o f t已經(jīng)允諾在下一個M S X M L版本中完
全支持X S LT和XPa t h,預(yù)計可以在2 0 0 0年1月份可以出來。到那時, James Clark(X S LT規(guī)范的
編者,XPa t h規(guī)范的編者之一)會提供出X L S T可安裝在J a v a類庫或者包的集合,并在Wi n 3 2環(huán)境
下可以運(yùn)行。這些可從下面網(wǎng)址下載:
本章這一部分的所有例子都用X T進(jìn)行了測試。X T的下載和使用須知可以在附錄G中找到。
本章所有例子都是在我們標(biāo)準(zhǔn)的c a t a l o g . x m l文件上操作的:
程序清單8 - 1 0 1
(1) 信息的行方式約束
298使用XML 高級編程
下載
在X M L中,信息的行方式約束等價于基于元素內(nèi)容的元素約束。如我們所知, XPa t h表達(dá)式
就是被用來尋找具有給定值的字段。
因此,如果我們想返回目錄中作者為Alex Homer的書籍,我們可以使用下面的格式:
程序清單8 - 1 0 2
注意上面的格式中有兩個模板。名字為“ c h i l d n o d e s”的模板被用來遞歸地寫出節(jié)點(diǎn)的后代
元素,而這些節(jié)點(diǎn)正被寫入輸出X M L文檔—< x s l : c o p y >用來復(fù)制當(dāng)前節(jié)點(diǎn),同樣c h i l d n o d e s模
板把遇見的所有子節(jié)點(diǎn)復(fù)制到文件中。我們會在下面的幾個例子中使用這種技術(shù)。
用來執(zhí)行行選擇的這部分模板是位于第一個模板中的塊< x s l : f o r- e a c h >。這個塊僅選擇文檔
中待輸出的那些書—位于方括號內(nèi)的,和XPa t h表達(dá)式相匹配的那些(如我們所知,選擇帶有
文本Alex Homer的< A u t h o r >元素)。在遇見我們的c a t a l o g . x m l文檔時該腳本輸出會返回A l e x編著
的三本書:
程序清單8 - 1 0 3
第8章鏈接和查詢使用299 下載
(2) 返回信息的列方式約束
對于X M L來說,通過對文本水平的元素或者由一個樣式表的返回屬性進(jìn)行約束可以達(dá)到對
返回信息進(jìn)行列方式約束的目的。假如說我們想從整個書籍清單中提取一些書的標(biāo)題,而A l e x
H o m e r是這些書的有貢獻(xiàn)作者,我們可以使用下面的樣式表:
程序清單8 - 1 0 4
這里,我們把另外一個XPa t h表達(dá)式作為孩子來從被選書籍中選擇標(biāo)題—僅返回被選書的標(biāo)
題。很明顯,在第二個s e l e c t指令中可以修改XPa t h來改變文本元素—或者列—正在被返回的。
上面的查詢返回下面的輸出:
程序清單8 - 1 0 5
注意我們在中間增加了空白以使X T的輸出更具可讀性。
(3) 返回信息概括
X M L信息可利用XPa t h的內(nèi)置集成函數(shù)來進(jìn)行歸納總結(jié)。例如,我們?nèi)绻氆@取部分由A l e x
H o m e r完成的每本書的總頁數(shù),可以采用下面的樣式表:
300使用XML 高級編程
下載
程序清單8 - 1 0 6
這里我們把使用< x s l : v a l u e - o f >元素中XPa t h表達(dá)式選擇出的< P a g e s >元素的數(shù)量值用sum( )函
數(shù)累加起來就可以了。注意我們利用XPa t h表達(dá)式按照同樣的方式對價格進(jìn)行操作,因?yàn)樵谀夸?br />
中定義< P r i c e >元素時,加了一個前綴$。由于XPa t h提供了一些用于處理字符操作的函數(shù),它不
能對按照S Q L命令相同的方式對集合進(jìn)行操作,那樣會使嵌套操作(例如,去掉前導(dǎo)美元符,
并把結(jié)果數(shù)值累加起來)變得很困難。
把這個格式頁面應(yīng)用于c a t a l o g . x m l文檔之后。我們有:
程序清單8 - 1 0 7
(4) 排序
現(xiàn)在我們把查詢延伸一下,來查詢是Alex Homer是作者之一的那些書籍。我們也對返回的
書按照標(biāo)題進(jìn)行排序(按字母順序):
程序清單8 - 1 0 8
我們只需把< x s l : s o r t >元素添加到< x s l : f o r- e a c h >元素。它指明了< x s l : f o r- e a c h >元素的S e l e c t屬
性返回的節(jié)點(diǎn)集按照Ti t l e排序。
第8章鏈接和查詢使用301 下載
這是我們的轉(zhuǎn)換輸出:
程序清單8 - 1 0 9
(5) 內(nèi)部連接
由于X M L文檔具有像指針一樣的包含方式,將內(nèi)部連接的概念應(yīng)用于它們就不太必要了
—如果信息塊已經(jīng)包含在你所具備的那一部分,就沒有必要再去查找了。另一方面,如果我
們利用I D和I D R E F屬性把元素之間連接起來,我們則需要這個功能。XPa t h允許我們沿著節(jié)點(diǎn)樹
來將一個文檔貫穿起來,允許我們產(chǎn)生一些類似于S Q L內(nèi)部連接機(jī)制提供的選擇書-作者對,而
這些書的作者之一為Alex Homer:
程序清單8 - 11 0
這里,我們使用了兩個< x s l : f o r- e a c h >塊。第一個塊處理問題的過濾方面:哪些書是你感興趣
的?第二個塊,沿著節(jié)點(diǎn)樹向下反復(fù)瀏覽來得到我們感興趣的東西: < A u t h o r >元素。然后再沿著
節(jié)點(diǎn)樹向上瀏覽—去獲得我們感興趣的另一個信息塊,也就是書的標(biāo)題。下面是轉(zhuǎn)換輸出:
程序清單8 - 111
302使用XML 高級編程
下載
(6) 外部連接
由于還是由于X M L文檔提供了包含功能,外部連接也向關(guān)系數(shù)據(jù)庫那樣重要—處理器只
需查看一下一元素即可弄清楚信息塊存在還是不存在。不過,通過瀏覽文檔樹,來提供一些類
似外部連接所提供的功能還是可行的。假如我們提取一列書籍,指明這些書是不是由A l e x
H o m e r完成了一部分。在S Q L中,我們可以使用外部連接,如果一本書Alex Homer并沒有寫其中
的一部分,則返回N U L L。在X S LT中,我們可以利用count( )函數(shù)和< x s l : c h o o s e >分支元素來提
供類似功能:
程序清單8 - 11 2
第8章鏈接和查詢使用303 下載
這里,我們來驗(yàn)證一下Alex Homer是不是每本書的有貢獻(xiàn)作者之一(函數(shù)c o u n t()行使檢
查功能);然后我們根據(jù)條件元素< x s l : c h o o s e >代表的路徑采用一種方法來創(chuàng)建元素。變換結(jié)果
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(103)