[db:手冊(cè)說明]
XSL可以描述如何來顯示XML文檔,它的全稱是“可擴(kuò)展樣式表語(yǔ)言”。XML 并不適用預(yù)先定義的標(biāo)簽,因此它的每個(gè)標(biāo)簽的意義都略顯生澀。XSL 之于XML,就像CSS之于HTML。
通過為XML寫XSL可以使XML顯示成不同的格式,使用XSL,可告知XML頁(yè)面上的文字在網(wǎng)頁(yè)何處以何種字體顯示。XSL基于并擴(kuò)展了文檔風(fēng)格語(yǔ)義和規(guī)范語(yǔ)言(DSSSL)以及層疊樣式表版本1(CSS1)標(biāo)準(zhǔn)。
XSL包含了兩個(gè)部分,一個(gè)是XSLT ,用于轉(zhuǎn)換 XML 文檔的語(yǔ)言。另一個(gè)是XPath,用于在 XML 文檔中導(dǎo)航的語(yǔ)言。您也可以通過查閱《XSLT教程》以及《XPath教程》了解更多相關(guān)詳情。
XSL 專門用于處理 XML 文檔,并且遵循 XML 語(yǔ)法。
XSLT 是一種基于模式匹配的語(yǔ)言。它會(huì)查找匹配特定條件的節(jié)點(diǎn),然后應(yīng)用相應(yīng)的規(guī)則。因此,它不具備大多數(shù)編程語(yǔ)言的計(jì)算能力。
XSL 不能代替或補(bǔ)充 CSS。也不能用于設(shè)置 HTML 的樣式。
XSL 不能用于更改 XML 文檔的內(nèi)容或者編輯信息。但是,您可以將 XML 和 XSL 用于需要處理幾種不同格式的文檔。
一種快速執(zhí)行XSLT轉(zhuǎn)換的方法,其特征在于通過一個(gè)流處理模型來執(zhí)行XSLT轉(zhuǎn)換,具體步驟如下:
(1)首先通過構(gòu)造轉(zhuǎn)換樹,將XML源文檔的結(jié)構(gòu)信息和XSLT轉(zhuǎn)換要求結(jié)合起來,其步驟為:構(gòu)造XML文檔類型定義的DTD樹T;考察XSLT轉(zhuǎn)換程序L的每一條轉(zhuǎn)換規(guī)則r,在T中找到r的匹配節(jié)點(diǎn)n;繼續(xù)考察r的輸出模板序列中的每一個(gè)元素o,如果o是一個(gè)常數(shù)字符串,為樹T創(chuàng)建一個(gè)葉子節(jié)點(diǎn)n’,添加一條從n到n’的邊;如果o是調(diào)用模板命令,從樹T中找到o的選中節(jié)點(diǎn)n’,同樣添加一條從n到n’的邊;
(2)從轉(zhuǎn)換樹建立流處理模型,它是一個(gè)遞歸過程,其步驟為:對(duì)轉(zhuǎn)換樹的任一節(jié)點(diǎn)n,end(n),start(n)初始值為空串;如果n是葉子節(jié)點(diǎn),則令end(n):=pcdata+end(n);以c1,c2,...,cp表示節(jié)點(diǎn)n下面所有來自于DTD樹的孩子節(jié)點(diǎn),以d1,d2,...,dq表示節(jié)點(diǎn)n下面所有來自于XSLT轉(zhuǎn)換程序的孩子節(jié)點(diǎn),如果d1是一個(gè)常數(shù)字符串節(jié)點(diǎn),則令start(n):=start(n)+d1,并且設(shè)置計(jì)數(shù)器i為2,否則,設(shè)置計(jì)數(shù)器i為1;當(dāng)i不大于q的時(shí)候,重復(fù)以下步驟:假設(shè)c是位于從節(jié)點(diǎn)n到節(jié)點(diǎn)di這條路徑上的n的孩子節(jié)點(diǎn),如果從n到c的邊沒有被星號(hào)標(biāo)記,并且di+1是常數(shù)串節(jié)點(diǎn),則令end(c):=end(c)+di+1和i:=i+2,否則令i:=i+1;如果di+1是常數(shù)串節(jié)點(diǎn),假設(shè)c′是位于從節(jié)點(diǎn)n到節(jié)點(diǎn)di+2這條路徑上的n的孩子節(jié)點(diǎn),則令start(c′):=di+1+start(c′)和i:=i+2,否則令i:=i+1;對(duì)每一個(gè)孩子節(jié)點(diǎn)dj,遞歸調(diào)用以上過程;
(3)掃描XML源文檔,通過流處理模型,將一個(gè)XSLT轉(zhuǎn)換程序轉(zhuǎn)化成很多個(gè)事件處理器;在從頭到尾讀XML取源文檔的過程中會(huì)觸發(fā)很多事件,對(duì)每一類事件,都有一個(gè)對(duì)應(yīng)的輸出片斷;最開始的時(shí)候,結(jié)果文檔為空,隨著對(duì)源文檔的掃描過程的進(jìn)行,相應(yīng)事件的輸出片斷被逐漸添加到已產(chǎn)生的結(jié)果文檔的后面;在掃描過程結(jié)束后,用戶馬上就可以得到最終完整的結(jié)果文檔;其中,end(n)為元素結(jié)束事件的輸出片段,start(n)為元素開始事件的輸出片段,pcdata為當(dāng)前葉子節(jié)點(diǎn)的PCDATA值。