[理學(xué)]論文關(guān)于XSLT的應(yīng)用研究_第1頁(yè)
[理學(xué)]論文關(guān)于XSLT的應(yīng)用研究_第2頁(yè)
[理學(xué)]論文關(guān)于XSLT的應(yīng)用研究_第3頁(yè)
[理學(xué)]論文關(guān)于XSLT的應(yīng)用研究_第4頁(yè)
[理學(xué)]論文關(guān)于XSLT的應(yīng)用研究_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、關(guān)于xslt的應(yīng)用研究說(shuō) 明本表需在指導(dǎo)教師和有關(guān)領(lǐng)導(dǎo)審查批準(zhǔn)的情況下,要求學(xué)生認(rèn)真填寫(xiě)。說(shuō)明課題的來(lái)源(自擬題目或指導(dǎo)教師承擔(dān)的科研任務(wù))、課題研究的目的和意義、課題在國(guó)內(nèi)外研究現(xiàn)狀和發(fā)展趨勢(shì)。若課題因故變動(dòng)時(shí),應(yīng)向指導(dǎo)教師提出申請(qǐng),提交題目變動(dòng)論證報(bào)告。課題來(lái)源:哈爾濱師范大學(xué)計(jì)算機(jī)科學(xué)系教研組,指導(dǎo)教師李晶關(guān)于xslt的應(yīng)用研究,技術(shù)路線(xiàn)是xslt(xml轉(zhuǎn)換語(yǔ)言)的結(jié)構(gòu)及使用。課題研究的目的和意義:extensible stylesheet language transformations(xslt,可擴(kuò)展樣式單語(yǔ)言轉(zhuǎn)換)是一種用來(lái)轉(zhuǎn)換extensible markup languag

2、e(xml,可擴(kuò)展標(biāo)記語(yǔ)言)文檔結(jié)構(gòu)的語(yǔ)言。xml是一種電腦程序間交換原始數(shù)據(jù)的簡(jiǎn)單而標(biāo)準(zhǔn)的方法,從根本上解決了應(yīng)用系統(tǒng)間的信息交換。為了使數(shù)據(jù)適合不同的應(yīng)用程序,我們必須有能夠?qū)⒁环N數(shù)據(jù)格式轉(zhuǎn)換為另一種數(shù)據(jù)格式。而xslt就是我們用來(lái)實(shí)現(xiàn)這種轉(zhuǎn)換功能的語(yǔ)言。將xml轉(zhuǎn)換為html,是目前xslt最主要的功能。xslt的主要用途就是數(shù)據(jù)轉(zhuǎn)換應(yīng)用。由于以xml為基礎(chǔ)的電子商務(wù)廣泛普及,xslt作為數(shù)據(jù)轉(zhuǎn)換的角色也越來(lái)越重要。例如直接將電視新聞的數(shù)據(jù)格式轉(zhuǎn)換成報(bào)紙新聞需要的數(shù)據(jù)格式;將股票數(shù)據(jù)直接轉(zhuǎn)換成圖片顯示在網(wǎng)頁(yè)上;對(duì)edi(電子數(shù)據(jù)交換)數(shù)據(jù)進(jìn)行統(tǒng)計(jì),排序等等。xslt是處理類(lèi)似工作的理想工

3、具。xml解析器都很小,性能也很好,在每種平臺(tái)上都可以找到。一旦我們接收到xml數(shù)據(jù)并把它解析成上面的樣式后,我們就可以通過(guò)xslt把他們轉(zhuǎn)換成不同的表現(xiàn)形式。利用xml的數(shù)據(jù)格式進(jìn)行數(shù)據(jù)傳輸,將會(huì)使我們編寫(xiě)應(yīng)用程序代碼的工作更簡(jiǎn)單輕松,而且具有良好的可伸縮性。國(guó)內(nèi)外同類(lèi)課題研究現(xiàn)狀及發(fā)展趨勢(shì):像很多其他xml家族成員一樣,xslt是由w3c起草和制定的。它的主要發(fā)展歷程如下: .1995年由james clark提議; .1997年8月正式提案為xsl; .1998年5月由norman walsh完成需求概要; .1998年8月18日xsl草案發(fā)布; .1999年11月16日正式發(fā)布xsl

4、1.0推薦版本。xslt 2.0 是一個(gè) xslt 1.0 的被校訂的版本推薦 xslt 1.0 ,在 1999 年十一月 16 日出版。xslt 的公眾討論在可擴(kuò)展類(lèi)型語(yǔ)言-目錄的論壇上進(jìn)行,這一份文件在 2004 年2月5日w3 c 專(zhuān)利權(quán)政策之下操作的一個(gè)小組生產(chǎn)了。少數(shù)的編輯訂正,在 2006 年11月 21 日當(dāng)做被提議的推薦出版文件。目前,xslt仍然在快速的發(fā)展中。 課題研究的主要內(nèi)容和方法,研究過(guò)程中的主要問(wèn)題和解決辦法:一主要研究的基本理論、結(jié)構(gòu)xslt的概念,初步介紹,以及如何使用xslt還有 xslt創(chuàng)建html頁(yè)面的技術(shù)和xslt 的工作原理。xslt是幫助xml文檔(

5、document)轉(zhuǎn)換為其它文檔。xslt不僅僅用于將xml轉(zhuǎn)換為html或其它文本格式,具體的說(shuō),xslt是一種用來(lái)轉(zhuǎn)換xml文檔結(jié)構(gòu)的語(yǔ)言。xslt轉(zhuǎn)換xml,是將xml原文檔輸入,用xsl作為模板,通過(guò)轉(zhuǎn)換引擎,最終輸出需要的html文檔。二主要問(wèn)題和解決辦法近年來(lái),對(duì)xslt的結(jié)構(gòu)及其應(yīng)用的研究已成為時(shí)下較為熱門(mén)的課題。xslt 作為一種操縱xml 文檔的轉(zhuǎn)換語(yǔ)言有著豐富的命令和函數(shù), 利用xslt 技術(shù)可以方便地完成對(duì)xml 文檔內(nèi)容的分析、處理, 同時(shí)可以將源xml 文檔轉(zhuǎn)換為多種不同的格式。在對(duì)數(shù)據(jù)庫(kù)的操作中, 應(yīng)當(dāng)時(shí)刻考慮數(shù)據(jù)是否有效的問(wèn)題,數(shù)據(jù)有效性監(jiān)測(cè)應(yīng)貫穿于數(shù)據(jù)庫(kù)操作的整

6、個(gè)過(guò)程, 從而使數(shù)據(jù)輸入規(guī)范化、智能化、人性化, 提高數(shù)據(jù)的可靠性。雖然xslt功能限定于對(duì)xml文檔進(jìn)行轉(zhuǎn)換的部分,但xslt中,模板功能十分強(qiáng)大,因此廣泛應(yīng)用于跨平臺(tái)的數(shù)據(jù)交換領(lǐng)域。另外xslt中支持原義元素的使用,可以方便地從xml文檔創(chuàng)建html文檔,用于數(shù)據(jù)的web發(fā)表。而xslt簡(jiǎn)單高效、功能強(qiáng)大、調(diào)試方便,因此它仍然是最好的文檔轉(zhuǎn)換技術(shù),即使在dom中,也提供了一個(gè)接口,可以使用外部的xslt文檔進(jìn)行xml文檔轉(zhuǎn)換。課題研究起止時(shí)間和進(jìn)度安排:起止時(shí)間2007年1月2007年5月進(jìn)度安排2008-1-202008-3-1 確定論文題目,填寫(xiě)開(kāi)題報(bào)告2008-3-1 2008-3-

7、16 查閱和收集畢業(yè)設(shè)計(jì)相關(guān)資料2008-3-162008-3-23 學(xué)習(xí)掌握關(guān)于xslt的應(yīng)用研究相關(guān)基礎(chǔ)知識(shí)2008-3-232008-4-8 關(guān)于xslt的應(yīng)用研究2008-4-9 2008-4-15 完善設(shè)計(jì)及撰寫(xiě)論文2008-5 定稿準(zhǔn)備答辯課題研究所需主要設(shè)備、儀器及藥品:計(jì)算機(jī)一臺(tái)要求主機(jī)配置 奔四cpu處理器 內(nèi)存256m以上 具有網(wǎng)卡可以上網(wǎng)顯示器 純平 軟件 系統(tǒng)軟件及其自帶軟件 常用辦公軟件 程序編譯軟件 翻譯軟件外出調(diào)研主要單位,訪(fǎng)問(wèn)學(xué)者姓名:哈爾濱師范大學(xué)計(jì)算機(jī)科學(xué)系教研組指導(dǎo)教師李晶指導(dǎo)教師審查意見(jiàn):指導(dǎo)教師 (簽字) 2008年3 月 教研室(研究室)評(píng)審意見(jiàn):_

8、教研室(研究室)主任 (簽字) 2008年3 月系(部)主任審查意見(jiàn):_系(部)主任 (簽字) 2008年3 月摘要:xml 因?yàn)樗诳蓴U(kuò)展性和靈活性上的優(yōu)點(diǎn)以及w3c 不遺余力的為它制定各種標(biāo)準(zhǔn), 已經(jīng)成為internet 上的主要語(yǔ)言。如何對(duì)xml 文檔進(jìn)行轉(zhuǎn)換以滿(mǎn)足不同用戶(hù)的需要, 成為一個(gè)非常重要的問(wèn)題, 利用xslt 可以很好的解決這個(gè)問(wèn)題。本文詳細(xì)描述了基于xslt 轉(zhuǎn)換xml 文檔的方法, 深入討論其工作原理, 并結(jié)合一個(gè)具體應(yīng)用實(shí)例, 進(jìn)一步闡明了基xslt 轉(zhuǎn)換xml 文檔的過(guò)程。文章基于xslt技術(shù),探討了一種使用xslt將xml文檔轉(zhuǎn)換為html頁(yè)的新技術(shù),使用圖形web

9、頁(yè)設(shè)計(jì)程序,如. net內(nèi)建的web頁(yè)設(shè)計(jì)程序或frontpage中的web頁(yè)設(shè)計(jì)程序,以圖形方式創(chuàng)建頁(yè),然后查看html背后的代碼。之后可以將這些代碼結(jié)合到xslt轉(zhuǎn)換文件中。關(guān)鍵詞:xml; xslt; xml 轉(zhuǎn)換 目錄第一章 引言11.1研究背景11.2發(fā)展現(xiàn)狀11.2.1 什么是xpath11.2.2 xslt和css的比較21.2.3 xslt和ie521.3研究目標(biāo)與內(nèi)容2第二章 xslt初步介紹42.1測(cè)試示例42.2 xslt風(fēng)格表單52.3 xslt的實(shí)例52.3.1 xslt如何轉(zhuǎn)換xml52.3.2 一個(gè)實(shí)例62.3.3 過(guò)程解析72.3.4 xslt的用途 82.4.

10、xslt的元素語(yǔ)法82.4.1 xsl:template和xsl:apply-templates 82.4.2 xsl:value-of102.4.3 xsl:for-each 102.4.4 xsl:if 102.4.5 xsl:choose, xsl:when 和 xsl:otherwise 112.4.6 xsl:sort 112.5 xpath 表達(dá)式122.6 節(jié)點(diǎn)導(dǎo)航132.7 訪(fǎng)問(wèn)數(shù)據(jù)132.8 高級(jí)方法132.9 執(zhí)行模版132.9.1 xsl:apply-templates132.9.2 xsl:call-template142.10 參數(shù)和變量142.10.1 xsl:pa

11、ram / xsl:with-param142.10.2 xsl:variable152.11 計(jì)算值162.11.1 xsl:value-of162.11.2 xsl:number162.11.3 xsl:for-each162.11.4 xsl:sort172.12 條件172.12.1 xsl:if172.12.2 xsl:choose / xsl:when / xsl:otherwise182.12.3 詳細(xì)的示例18第三章 xslt技術(shù)及模式203.1 使用開(kāi)發(fā)xslt203.2 基本xslt之外203.3xslt處理模式203.3.1xslt處理模式213.3.2創(chuàng)建結(jié)果樹(shù)213.

12、3.3xslt應(yīng)用模式223.3.4數(shù)據(jù)顯示的例子22第四章 xslt 的工作原理244.1 案例說(shuō)明244.2 xslt應(yīng)用編程254.2.1xml文檔的類(lèi)型254.2.2以數(shù)據(jù)為中心的xml文檔轉(zhuǎn)換264.2.3xslt程序指令264.2.4組織循環(huán)264.2.5分支語(yǔ)句27第五章 運(yùn)用xslt實(shí)現(xiàn)html頁(yè)面技術(shù)29第六章 結(jié)束語(yǔ)32參考文獻(xiàn)33applica ton programm ing of xslt34 35第一章 引言 1.1研究背景現(xiàn)在我將為大家介紹xml家族的另一種語(yǔ)言xslt,xslt類(lèi)似html中的css,但是比css功能要強(qiáng)大的多。學(xué)習(xí)xslt的前提是您對(duì)xml已經(jīng)

13、有一些了解。xslt可以說(shuō)更偏向是一種程序語(yǔ)言,但它沒(méi)有常見(jiàn)程序語(yǔ)言復(fù)雜,甚至比js等腳本語(yǔ)言還簡(jiǎn)單,用平實(shí)易懂的語(yǔ)言,由淺入深的介紹xslt。我們首先來(lái)澄清一個(gè)概念,大家可能聽(tīng)說(shuō)過(guò)xsl(extensible stylesheet language),xsl和我們這里說(shuō)的xslt從狹義上理解是一樣的,而按照w3c的標(biāo)準(zhǔn),xslt的說(shuō)法更嚴(yán)格些,因此我們?cè)谖恼轮薪y(tǒng)一使用xslt的稱(chēng)法。它們之間具體的關(guān)系我們會(huì)在下面講述。xslt的英文標(biāo)準(zhǔn)名稱(chēng)為extensible stylesheet language transformation。根據(jù)w3c的規(guī)范說(shuō)明書(shū)(/t

14、r/xslt),最早設(shè)計(jì)xslt的用意是幫助xml文檔(document)轉(zhuǎn)換為其它文檔。但是隨著發(fā)展,xslt已不僅僅用于將xml轉(zhuǎn)換為html或其它文本格式,更全面的定義應(yīng)該是:xslt是一種用來(lái)轉(zhuǎn)換xml文檔結(jié)構(gòu)的語(yǔ)言。我們已經(jīng)知道,xml是一種電腦程序間交換原始數(shù)據(jù)的簡(jiǎn)單而標(biāo)準(zhǔn)的方法。它的成功并不在于它容易被人們書(shū)寫(xiě)和閱讀,更重要的是,它從根本上解決了應(yīng)用系統(tǒng)間的信息交換。因?yàn)閤ml滿(mǎn)足了兩個(gè)基本的需求: (1).將數(shù)據(jù)和表達(dá)形式分離。就象天氣預(yù)報(bào)的信息可以顯示在不同的設(shè)備上,電視,手機(jī)或者其它。(2).在不同的應(yīng)用之間傳輸數(shù)據(jù)。電子商務(wù)數(shù)據(jù)交換的與日俱增使得這種需求越來(lái)越緊迫。為了使

15、數(shù)據(jù)便于人們的閱讀理解,我們需要將信息顯示出來(lái)或者打印出來(lái),例如將數(shù)據(jù)變成一個(gè)html文件,一個(gè)pdf文件,甚至是一段聲音;同樣,為了使數(shù)據(jù)適合不同的應(yīng)用程序,我們必須有能夠?qū)⒁环N數(shù)據(jù)格式轉(zhuǎn)換為另一種數(shù)據(jù)格式,比如需求格式可能是一個(gè)文本文件,一個(gè)sql語(yǔ)句,一個(gè)http信息,一定順序的數(shù)據(jù)調(diào)用等。而xslt就是我們用來(lái)實(shí)現(xiàn)這種轉(zhuǎn)換功能的語(yǔ)言。將xml轉(zhuǎn)換為html,是目前xslt最主要的功能。1.2發(fā)展現(xiàn)狀 像很多其他xml家族成員一樣,xslt是由w3c起草和制定的。它的主要發(fā)展歷程如下: 1995年由james clark提議; 1997年8月正式提案為xsl; 1998年5月由norma

16、n walsh完成需求概要; 1998年8月18日xsl草案發(fā)布; 1999年11月16日正式發(fā)布xsl 1.0推薦版本。xslt 2.0 是一個(gè) xslt 1.0 的被校訂的版本推薦 xslt 1.0 ,在 1999 年十一月 16 日出版。xslt 的公眾討論在可擴(kuò)展類(lèi)型語(yǔ)言-目錄的論壇上進(jìn)行,這一份文件在 2004 年2月5日w3 c 專(zhuān)利權(quán)政策之下操作的一個(gè)小組生產(chǎn)了。少數(shù)的編輯訂正,在 2006 年11月 21 日當(dāng)做被提議的推薦出版文件。目前,xslt仍然在快速的發(fā)展中。 1.2.1 什么是xpath xpath是xslt的重要組成部分,我們將在第四章講解它的詳細(xì)語(yǔ)法。那么xpat

17、h是什么呢?我們首先來(lái)了解一下xsl系列的家族關(guān)系。如圖所示: sgml xml html xsl xslt xslfo(formatting objects)-css xslt xpath 圖1.1 xsl關(guān)系結(jié)構(gòu)xsl在轉(zhuǎn)換xml文檔時(shí)分為明顯的兩個(gè)過(guò)程,第一轉(zhuǎn)換文檔結(jié)構(gòu);其次將文檔格式化輸出。這兩步可以分離開(kāi)來(lái)并單獨(dú)處理,因此xsl在發(fā)展過(guò)程中逐漸分裂為xslt(結(jié)構(gòu)轉(zhuǎn)換)和xsl-fo(formatting objects)(格式化輸出)兩種分支語(yǔ)言,其中xsl-fo的作用就類(lèi)似css在html中的作用。而我們這里重點(diǎn)討論的是第一步的轉(zhuǎn)換過(guò)程,也就是xslt。另外,在學(xué)習(xí)xml時(shí)我們已

18、經(jīng)知道xml是一個(gè)完整的樹(shù)結(jié)構(gòu)文檔。在轉(zhuǎn)換xml文檔時(shí)可能需要處理其中的一部分(節(jié)點(diǎn))數(shù)據(jù),那么如何查找和定位xml文檔中的信息呢,xpath就是一種專(zhuān)門(mén)用來(lái)在xml文檔中查找信息的語(yǔ)言。xpath隸屬xslt,因此我們通常會(huì)將xslt語(yǔ)法和xpath語(yǔ)法混在一起說(shuō)。用一種比較好理解的解釋?zhuān)喝绻麑ml文檔看作一個(gè)數(shù)據(jù)庫(kù),xpath就是sql查詢(xún)語(yǔ)言;如果將xml文檔看成dos目錄結(jié)構(gòu),xpath就是cd,dir等目錄操作命令的集合。1.2.2 xslt和css的比較 css同樣可以格式化xml文檔,那么有了css為什么還需要xslt呢?因?yàn)閏ss雖然能夠很好的控制輸出的樣式,比如色彩,字體,

19、大小等,但是它有嚴(yán)重的局限性,就是:(1) css不能重新排序文檔中的元素;(2) css不能判斷和控制哪個(gè)元素被顯示,哪個(gè)不被顯示;(3) css不能統(tǒng)計(jì)計(jì)算元素中的數(shù)據(jù);換句話(huà)說(shuō),css只適合用于輸出比較固定的最終文檔。css的優(yōu)點(diǎn)是簡(jiǎn)潔,消耗系統(tǒng)資源少;而xslt雖然功能強(qiáng)大,但因?yàn)橐匦滤饕齲ml結(jié)構(gòu)樹(shù),所以消耗內(nèi)存比較多。因此,我們常常將它們結(jié)合起來(lái)使用,比如在服務(wù)器端用xslt處理文檔,在客戶(hù)端用css來(lái)控制顯示??梢詼p少響應(yīng)時(shí)間。1.2.3 xslt和ie5 在xslt草案發(fā)布不久,微軟就在ie4中提供了支持xsl功能的預(yù)覽版本,到ie5.0發(fā)布時(shí),正式全面支持xslt,可是由于

20、ie5發(fā)布的比xslt1.0標(biāo)準(zhǔn)時(shí)間早,因此在ie5.0中支持的xstl功能和xslt 1.0略有不同。xml推行的主要原因之一就是解決html過(guò)分依賴(lài)瀏覽器的問(wèn)題,現(xiàn)在微軟又想標(biāo)新立異?好在微軟的ie5.5中執(zhí)行的標(biāo)準(zhǔn)已經(jīng)和w3c的xslt1.0基本相近。但令人頭疼的是ie5.0已經(jīng)發(fā)行了幾百萬(wàn)套,您使用的xslt很可能不能被客戶(hù)的瀏覽器正確執(zhí)行。目前xslt 1.1仍在發(fā)展中,w3c及有關(guān)組織也在和微軟協(xié)商爭(zhēng)取獲得統(tǒng)一。1.3研究目標(biāo)與內(nèi)容主要研究?jī)?nèi)容是xslt的概念,初步介紹,以及如何使用xslt還有 xslt創(chuàng)建html頁(yè)面的技術(shù)和xslt 的工作原理。xslt是幫助xml文檔(doc

21、ument)轉(zhuǎn)換為其它文檔。xslt不僅僅用于將xml轉(zhuǎn)換為html或其它文本格式,具體的說(shuō),xslt是一種用來(lái)轉(zhuǎn)換xml文檔結(jié)構(gòu)的語(yǔ)言。xslt轉(zhuǎn)換xml,是將xml原文檔輸入,用xsl作為模板,通過(guò)轉(zhuǎn)換引擎,最終輸出需要的html文檔。xml 因?yàn)樗诳蓴U(kuò)展性和靈活性上的優(yōu)點(diǎn)以及w3c 不遺余力的為它制定各種標(biāo)準(zhǔn), 已經(jīng)成為internet 上的主要語(yǔ)言。如何對(duì)xml 文檔進(jìn)行轉(zhuǎn)換以滿(mǎn)足不同用戶(hù)的需要, 成為一個(gè)非常重要的問(wèn)題, 利用xslt 可以很好的解決這個(gè)問(wèn)題。本文詳細(xì)描述了基于xslt 轉(zhuǎn)換xml 文檔的方法, 深入討論其工作原理, 并結(jié)合一個(gè)具體應(yīng)用實(shí)例, 進(jìn)一步闡明了基于xsl

22、t 轉(zhuǎn)換xml 文檔的過(guò)程?;趚slt技術(shù),探討了一種使用xslt將xml文檔轉(zhuǎn)換為html頁(yè)的新技術(shù),使用圖形web頁(yè)設(shè)計(jì)程序,如. net內(nèi)建的web頁(yè)設(shè)計(jì)程序或frontpage中的web頁(yè)設(shè)計(jì)程序,以圖形方式創(chuàng)建頁(yè),然后查看html背后的代碼。之后可以將這些代碼結(jié)合到xslt轉(zhuǎn)換文件中。并用面向?qū)ο蟮母呒?jí)程序設(shè)計(jì)語(yǔ)言visual basic 6. 0對(duì)上述算法的主要模型進(jìn)行了實(shí)現(xiàn)。對(duì)xslt的功能進(jìn)行了簡(jiǎn)介,詳細(xì)討論了xslt的工作原理、處理模式及節(jié)點(diǎn)樹(shù)轉(zhuǎn)換等主要語(yǔ)法,并通過(guò)示例說(shuō)明其具體使用方法。本文共分五章。第一章引言介紹研究背景和研究任務(wù),第二章詳細(xì)介紹xslt相關(guān)語(yǔ)法,重點(diǎn)描

23、述語(yǔ)言用法,第三章闡述xslt工作原理分析設(shè)計(jì)過(guò)程,第四章對(duì)xslt技術(shù)及模式作一個(gè)完整的介紹,第五章運(yùn)用xslt實(shí)現(xiàn)html頁(yè)面的技術(shù)。 第二章 xslt初步介紹xsl也就是所謂的擴(kuò)展風(fēng)格表單語(yǔ)言(extensible stylesheet language)由3種語(yǔ)言組成。這三種語(yǔ)言負(fù)責(zé)把xml文檔轉(zhuǎn)換為其他格式。xml fo (xsl格式化對(duì)象:xsl formatting objects)說(shuō)明可視的文檔格式化,而xpath則訪(fǎng)問(wèn)xml文檔的特定部分。但是xslt(xsl transformations)才是把某一xml文檔轉(zhuǎn)換為其他格式的實(shí)際語(yǔ)言。最簡(jiǎn)單的應(yīng)用情況首先涉及到兩個(gè)文檔:包

24、含原始數(shù)據(jù)的xml文檔和用來(lái)轉(zhuǎn)換該文檔的xslt風(fēng)格表單。xslt處理器把xslt風(fēng)格表單的規(guī)則應(yīng)用到xml文檔從而新建出xhtml、wml、svg或者幾乎其他任何xml格式的第3個(gè)文檔。多個(gè)xslt風(fēng)格表單可以采用多種格式來(lái)表達(dá)某一文檔。單一的風(fēng)格表單還可以把某一數(shù)據(jù)類(lèi)型的多種實(shí)例轉(zhuǎn)換為標(biāo)準(zhǔn)的報(bào)告格式,你只需要修改風(fēng)格表單就可以改變這些報(bào)告模式。而xslt則可以把數(shù)據(jù)的多種實(shí)例轉(zhuǎn)換為多種格式而不僅僅局限于報(bào)告格式:由此可見(jiàn),xslt是一種把某一系統(tǒng)的數(shù)據(jù)格式轉(zhuǎn)換為另一系統(tǒng)(比如b2b交易)數(shù)據(jù)格式的強(qiáng)大工具。 一開(kāi)始得需要一個(gè)xslt處理器。隨著各類(lèi)技術(shù)的迅猛發(fā)展,所采用的技術(shù)工具可能會(huì)讓你

25、所進(jìn)行的項(xiàng)目要么成功要么毀滅。目前桌面xslt原型工具并不多,因?yàn)檫@類(lèi)工具大多數(shù)都針對(duì)全規(guī)模的產(chǎn)品系統(tǒng)。必須仔細(xì)考慮使用的工具如何支持xslt規(guī)范。最近推出的瀏覽器,比如internet explorer 5.5、netscape 6.1和mozilla等,它們都支持xslt處理功能。它們也許就是這方面最簡(jiǎn)單的使用工具了,可是,在其支持規(guī)范方面卻相當(dāng)欠缺。還有,瀏覽器并沒(méi)有支持真正的開(kāi)發(fā)工具,所以在調(diào)試代碼的時(shí)候毫無(wú)用處。xslt格式轉(zhuǎn)化通常在服務(wù)器上完成,所以瀏覽器只能對(duì)那些包含了指向風(fēng)格表單鏈接的xml文件才有效。instant saxon 是一款用于windows系統(tǒng)的命令行式的、服務(wù)器

26、風(fēng)格的xslt簡(jiǎn)單處理器。它實(shí)現(xiàn)了基本的文件輸出和錯(cuò)誤信息。相比瀏覽器能提供更穩(wěn)固的xslt 支持。雖然這一工具還不是完全意義上的開(kāi)發(fā)環(huán)境,但instant saxon作為實(shí)驗(yàn)用工具還是綽綽有余了。xml spy是一套完整的xml ide,它采用了instant saxon作為其xslt處理器。這一產(chǎn)品非常適合那些在應(yīng)用環(huán)境下開(kāi)發(fā)xml的工程人員,不過(guò)要掌握這套工具還真得需要點(diǎn)時(shí)間。2.1測(cè)試示例下面的例子假設(shè)xsl處理工具和xml、xsl文件都在一個(gè)目錄下。在這個(gè)例子中,我們用一個(gè)xml文檔表示快餐定貨單,下面我們需要把這個(gè)文檔轉(zhuǎn)換為可讀的html格式?,F(xiàn)在請(qǐng)把該xml文檔拷貝并且粘貼到某個(gè)

27、文本編輯器內(nèi),然后把它另存為order.xml文件。同樣的,把相應(yīng)的xsl 文檔拷貝為名為order.xsl的文件。這個(gè) xml 文件鏈接到該 xsl風(fēng)格表單,這樣你就可以在合適的瀏覽器中查看該xml 文件,或者用xml spy 對(duì)其進(jìn)行xsl transform 處理。接著用instant saxon打開(kāi)一個(gè)ms-dos命令行窗口,進(jìn)到文件所在目錄,鍵入saxon.exe order.xml order.xsl order.html命令。以上命令將把轉(zhuǎn)換后的html 結(jié)果輸出為一個(gè)名為 order.html的文件,這樣你就可以通過(guò)自己的瀏覽器查看該文件了。以上例子的結(jié)果如下:html頁(yè)面的標(biāo)

28、題顯示mike的定單(定單號(hào)734),內(nèi)容是他訂購(gòu)食品的列表,包括價(jià)格等。 xslt 處理器處理了包含數(shù)據(jù)的 xml文件并把它轉(zhuǎn)換為html輸出結(jié)果。xslt風(fēng)格表單則定義了描述xml數(shù)據(jù)的 html標(biāo)簽定位,方法是采用組成xslt語(yǔ)言的處理指令。雖然 xslt 處理器通常接受命令采用相應(yīng)的風(fēng)格表單處理,不過(guò),xml文檔可以指示自己默認(rèn)的xslt風(fēng)格表單,方法是在文檔中包含以下行:其中my.xsl是指向風(fēng)格表單的url。以上的代碼對(duì)基于瀏覽器的格式轉(zhuǎn)換是基本的要求。2.2 xslt風(fēng)格表單為了深入理解xslt 編程,必須首先理解 xml,因?yàn)?xslt不只是負(fù)責(zé)轉(zhuǎn)換 xml 而且自身還是一種完

29、全意義上的xml標(biāo)準(zhǔn)語(yǔ)言。在理論上,完全可以編寫(xiě)負(fù)責(zé)自身格式轉(zhuǎn)換的xslt風(fēng)格表單.xml 并不是一種通常意義上的語(yǔ)言,xml是一種元語(yǔ)言(metalanguage),也就是建立xml規(guī)范語(yǔ)言的結(jié)構(gòu)(比如xsl和 xhtml就是xml規(guī)范語(yǔ)言)。html看起來(lái)很象xml,但實(shí)際上違反了好些 xml規(guī)則。xml 語(yǔ)言定義了一套用來(lái)把數(shù)據(jù)標(biāo)記為元素(或者可以說(shuō)節(jié)點(diǎn))的標(biāo)簽。比方說(shuō),就xhtml語(yǔ)法而言,標(biāo)簽就等于開(kāi)始標(biāo)記某個(gè)特定的xml節(jié)點(diǎn)。xml節(jié)點(diǎn)可以包含屬性和內(nèi)容體。屬性是由字符串組成的名字/值對(duì)。內(nèi)容體可以是字符串和/或更多的 xml節(jié)點(diǎn)。這就意味著,xml是一種層次化的結(jié)構(gòu),可以表示很復(fù)

30、雜的數(shù)據(jù)格式。我們不妨考慮以下的一個(gè)xhtml片段:hello world! 在以上的代碼段中,每個(gè)節(jié)點(diǎn)都有自己的開(kāi)-閉標(biāo)簽,兩個(gè)標(biāo)簽之間是更多的節(jié)點(diǎn)和文本字符串。img 節(jié)點(diǎn)有一個(gè)src屬性而沒(méi)有內(nèi)容,緊挨著開(kāi)標(biāo)簽的是一個(gè)終止斜線(xiàn)。這個(gè)終止斜線(xiàn)和文本都在節(jié)點(diǎn)內(nèi)嵌套,而后者又在節(jié)點(diǎn)內(nèi)嵌套,顯然節(jié)點(diǎn)則在內(nèi)嵌套。xslt 的核心思想是建立上下文環(huán)境(context),也就是在xml文檔內(nèi)的特定節(jié)點(diǎn)或者整套節(jié)點(diǎn)同時(shí)輸出為存在于這個(gè)環(huán)境內(nèi)的格式化數(shù)據(jù)版本。為此, xslt風(fēng)格表單被分解為離散的模版,每個(gè)模版負(fù)責(zé)處理xml文檔內(nèi)某類(lèi)型的標(biāo)簽。在這些模版內(nèi),xslt要用到標(biāo)量、傳遞參數(shù)、循環(huán)條件以及其他轉(zhuǎn)

31、換xml的元件。元素是任何xslt風(fēng)格表單的最外層元素,你要為其指定版本和一個(gè)或者多個(gè)名稱(chēng)空間(namespace):.你可以設(shè)置其他屬性,但是,對(duì)幾乎所有的基本風(fēng)格表單來(lái)說(shuō),可以原樣使用這些標(biāo)簽。其中就可以嵌套模版元素了。2.3 xslt的實(shí)例 2.3.1 xslt如何轉(zhuǎn)換xml 我們打個(gè)有趣的比方,你玩過(guò)橡皮泥吧,用不同的模子按上去,就可以做出需要的形狀。如果我們假設(shè)xml數(shù)據(jù)文檔是一塊大橡皮泥,xslt就象是一個(gè)模子,用力一按,就做出需要的形狀來(lái)-符合不同需要的html文檔具體看下面的過(guò)程示意如圖所示:xsl xml 轉(zhuǎn)換引擎(xml processor) html文檔(或者其他xml文

32、檔) 圖1.2 xslt如何轉(zhuǎn)換xml我們將xml原文檔輸入,用xsl作為模板,通過(guò)轉(zhuǎn)換引擎,最終輸出需要的html文檔。其中的轉(zhuǎn)換引擎就是比喻中用力一按的過(guò)程。在具體應(yīng)用中,有專(zhuān)門(mén)的軟件來(lái)實(shí)現(xiàn)這個(gè)轉(zhuǎn)換過(guò)程,名為xml processor。目前已經(jīng)有很多 processor 軟件(下面將詳細(xì)提到),在ie5.5中也已經(jīng)內(nèi)嵌了xml processor。2.3.2 一個(gè)實(shí)例 現(xiàn)在我們來(lái)看一個(gè)簡(jiǎn)單的xslt實(shí)際應(yīng)用例子,獲得一些感官上的認(rèn)識(shí)。很多網(wǎng)頁(yè)設(shè)計(jì)師看到類(lèi)似html的代碼才會(huì)放心,代碼是那樣的親切和熟悉。例子1: hello, world! hello world作為第一個(gè)教程已經(jīng)是程序語(yǔ)言

33、中的慣例了。我們也遵守這個(gè)慣例,看看如何利用xslt來(lái) 顯示hello world。雖然這個(gè)例子沒(méi)有什么實(shí)際用途,但是請(qǐng)大家不要急,后面還有更詳細(xì)的例子。第一步:建立要輸入xml文檔hello.xml。hello, world!這是一個(gè)很簡(jiǎn)單xml文檔,只包含一個(gè)節(jié)點(diǎn)的xml結(jié)構(gòu)樹(shù)。第二步:建立xslt文檔hello.xsl。提示:默認(rèn)的xslt文件的后綴名為.xsl。first xslt example你現(xiàn)在可以用ie5.0以上版本瀏覽器打開(kāi)這個(gè)hello.xsl文件,看到xsl的結(jié)構(gòu)樹(shù)。第三步:在xml中調(diào)用這個(gè)xsl文件。修改hello.xml的代碼為:hello, world! ok,

34、到這一步原理上已經(jīng)完成了所有的代碼,接下來(lái)只要用一個(gè)xslt的處理器(xml processor)來(lái)執(zhí)行hello.xml就可以看到hello world的顯示結(jié)果了。流行的處理器軟件有以下幾種:(1).james clark的xt。下載網(wǎng)址:(2).ibm的xml for java軟件包,名為lotusxsl。(3).saxon。下載網(wǎng)址:(4).微軟的msxml3。下載網(wǎng)址: 我想在瀏覽器中看到hello world的效果應(yīng)該怎么做?在微軟的ie5.5內(nèi)嵌了msxml3解釋器,你可以用ie5.5打開(kāi)hello.xml文件,就可以看到結(jié)果。如果只看到xml結(jié)構(gòu)樹(shù),不是單獨(dú)的hello wor

35、ld字樣,說(shuō)明你的瀏覽器沒(méi)有安裝msxml3版本。如果沒(méi)有安裝又想看效果怎么辦?那還是用我們?cè)趚ml中的老辦法,采用js實(shí)現(xiàn)。下面是一種實(shí)現(xiàn)的代碼,可以保存為hello.htm,和上面的hello.xml,hello.xsl放在同一目錄下面。最后用ie5.0以上版本打開(kāi)hello.htm就可以看到效果了。var xmldoc = new activexobject(microsoft.xmldom);xmldoc.async=false;xmldoc.load(hello.xml);nodes = xmldoc.documentelement.childnodes;greeting.inner

36、text = nodes.item(0).text;first xslt example2.3.3 過(guò)程解析 如果你成功的看到效果,你也許想知道這些代碼的具體含義,我們來(lái)詳細(xì)解說(shuō):看hello.xsl文件 這是標(biāo)準(zhǔn)的xml文檔的首行代碼,因?yàn)閤slt本身也是xml文檔。encoding屬性用來(lái)定義文檔使用的編碼形式,iso-8859-1主要支持西歐和北美的語(yǔ)言編碼。如果你想使用簡(jiǎn)體中文,那么就應(yīng)該寫(xiě)成:接下去的代碼是: 這是標(biāo)準(zhǔn)的xslt文件首行代碼。xsl:stylesheet代碼的意思是將文檔作為一個(gè)樣式表來(lái)(stylesheet)處理。xmlns:xsl屬性是一個(gè)名字空間聲明,和xml中

37、的名字空間使用方法一樣,用來(lái)防止元素名稱(chēng)重復(fù)和混亂。其中前綴xsl的意思是文檔中使用的元素遵守w3c的xslt規(guī)范。最后的version屬性說(shuō)明樣式表只采用xslt 1.0的標(biāo)準(zhǔn)功能,這也是目前僅有的標(biāo)準(zhǔn)。 一個(gè)元素定義一個(gè)模板規(guī)則。屬性match=/說(shuō)明xml源文檔中,這個(gè)模板規(guī)則作用的起點(diǎn)。/是一種xpath語(yǔ)法,我們?cè)诤竺鎸⒃敿?xì)講述,這里的/代表xml結(jié)構(gòu)樹(shù)的根(root)。接下去的代碼是:first xslt example說(shuō)明:當(dāng)模板規(guī)則被觸發(fā),模板的內(nèi)容就會(huì)控制輸出的結(jié)果。例子中,模板大部分內(nèi)容由html元素和文本構(gòu)成。只有元素是xslt語(yǔ)法,這里的作用是拷貝原文檔中的一個(gè)節(jié)點(diǎn)的值

38、到輸出文檔。而select屬性則詳細(xì)指定要處理的節(jié)點(diǎn)名稱(chēng)。這是xpath語(yǔ)法,greeting的意思就是尋找根節(jié)點(diǎn)名為greeting的元素,并用模板來(lái)處理這個(gè)節(jié)點(diǎn)。具體的就是找到元素,然后將元素的值hello world按模板樣式拷貝到輸出文件。提示:由于xml文檔是嚴(yán)格的層級(jí)結(jié)構(gòu)(用ie5查看xml文件,會(huì)看見(jiàn)xml文檔類(lèi)似多級(jí)關(guān)聯(lián)菜單),所以我們形象的稱(chēng)xml文檔為文檔樹(shù),其中每一對(duì)元素稱(chēng)作樹(shù)的一個(gè)節(jié)點(diǎn)。根元素就是根節(jié)點(diǎn)。最后關(guān)閉所有元素: 你是否想過(guò)為什么要用這么復(fù)雜的方法來(lái)顯示hello world呢?關(guān)鍵不在表面,而在于實(shí)質(zhì):用這種方法,hello world可以從xml文檔中被提

39、取出來(lái),并用各種不同的xslt模板處理,來(lái)輸出不同需求的文檔。我們來(lái)看看xslt的主要用途:2.3.4 xslt的用途 xslt的主要用途就是數(shù)據(jù)轉(zhuǎn)換應(yīng)用。由于以xml為基礎(chǔ)的電子商務(wù)廣泛普及,xslt作為數(shù)據(jù)轉(zhuǎn)換的角色也越來(lái)越重要。例如直接將電視新聞的數(shù)據(jù)格式轉(zhuǎn)換成報(bào)紙新聞需要的數(shù)據(jù)格式;將股票數(shù)據(jù)直接轉(zhuǎn)換成圖片顯示在網(wǎng)頁(yè)上;對(duì)edi(電子數(shù)據(jù)交換)數(shù)據(jù)進(jìn)行統(tǒng)計(jì),排序等等。xslt是處理類(lèi)似工作的理想工具。 2.4.xslt的元素語(yǔ)法通過(guò)前面的介紹,我們已經(jīng)對(duì)xslt的基本概念和它的轉(zhuǎn)換過(guò)程有了一些了解。下面我們一起來(lái)看下xslt的具體語(yǔ)法。2.4.1 xsl:template和xsl:ap

40、ply-templates模板(template)是xslt中最重要的概念之一。xslt文件就是由一個(gè)一個(gè)的模板組成,任何一個(gè)xslt文件至少包含一個(gè)模板。模板的概念就象是搭積木;你如果是程序員,也可以將模板看作一個(gè)方法,一個(gè)類(lèi),或者一個(gè)模塊。它們可以被拼裝組合,也可以單獨(dú)成塊,不同的模板控制不同的輸出格式。 模板(template)由兩部分組成:匹配模式(match pattern)和執(zhí)行。簡(jiǎn)單的講模式定義xml源文檔中哪一個(gè)節(jié)點(diǎn)將被模板處理,執(zhí)行則定義輸出的是什么格式。兩部分對(duì)應(yīng)的語(yǔ)法為xsl:template和xsl:apply-templates。xsl:template的語(yǔ)法是: x

41、sl:template的作用是定義一個(gè)新模板。屬性中name,priority,和mode用來(lái)區(qū)別匹配同一節(jié)點(diǎn)的不同模板。它們不是常用的屬性。match屬性則控制模板的匹配模式(pattern),匹配模式是用來(lái)定位xml源文檔中哪一個(gè)節(jié)點(diǎn)被模板處理。一個(gè)模板匹配一個(gè)節(jié)點(diǎn)。我們用一個(gè)例子來(lái)幫助理解: 假設(shè)我們要處理一個(gè)包含章節(jié)和段落文檔。我們用para元素定義段落,用chapter元素定義章節(jié)。我們來(lái)看看match屬性可能的值。下面的語(yǔ)句寫(xiě)法說(shuō)明模板匹配所有的para元素下面的語(yǔ)句寫(xiě)法說(shuō)明模板匹配所有的para元素和所有的chapter元素:下面的語(yǔ)句寫(xiě)法說(shuō)明模板匹配所有的父節(jié)點(diǎn)為chapter

42、元素的para元素:下面的語(yǔ)句寫(xiě)法說(shuō)明模板匹配根節(jié)點(diǎn):我們?cè)賮?lái)看apply-templates語(yǔ)法: xsl:apply-templates用來(lái)執(zhí)行那一個(gè)節(jié)點(diǎn)被模板具體處理。你可以將它理解為程序中調(diào)用子函數(shù)。select屬性用來(lái)定義確切的節(jié)點(diǎn)名稱(chēng)。xsl:apply-templates總是包含在xsl:template元素中,象這樣:這段代碼說(shuō)明摸板匹配整個(gè)文檔(根節(jié)點(diǎn)),具體執(zhí)行時(shí)處理根節(jié)點(diǎn)下所有para元素。而這一段代碼則表示摸板匹配para節(jié)點(diǎn),所有para下的子元素都將被處理。2.4.2 xsl:value-ofxsl:value-of用來(lái)將源文檔中元素的文本值寫(xiě)到輸出文檔中。例如:有

43、一個(gè)個(gè)人資料的xml文檔:ajie28 我如果想在輸出文檔中顯示上面這個(gè)xml源文檔中的name元素的值,可以這樣寫(xiě)xslt代碼: 執(zhí)行后,你會(huì)看到ajie被單獨(dú)顯示出來(lái)。其中match=person定義摸板匹配person節(jié)點(diǎn),xsl:value-of 語(yǔ)法說(shuō)明需要輸出一個(gè)節(jié)點(diǎn)的值,而select=name則定義需要被輸出的元素為name??催@個(gè)過(guò)程是不是和數(shù)據(jù)庫(kù)里查詢(xún)一個(gè)人的名字很象?當(dāng)然,xsl:value-of查詢(xún)還有更多,更復(fù)雜的語(yǔ)法,因?yàn)槭巧婕皩ふ液投ㄎ坏墓δ埽覀儠?huì)放在后面的xpath語(yǔ)法中在仔細(xì)講解。同樣功能的還有xsl:copy-of,用法一樣,就不重復(fù)解釋了。2.4.3 x

44、sl:for-eachxsl:for-each語(yǔ)法允許你循環(huán)處理被選擇的節(jié)點(diǎn)。例如:有一個(gè)含多個(gè)個(gè)人資料的xml文檔:ajie28tom24miake30我需要顯示所有人的姓名,則可以將xslt代碼寫(xiě)成:2.4.4 xsl:ifxsl:if類(lèi)似普通程序語(yǔ)言的if條件語(yǔ)句,允許設(shè)定節(jié)點(diǎn)滿(mǎn)足某個(gè)條件時(shí),被模板處理。xsl:if的語(yǔ)法格式為:template body例如: 這段代碼的意思是檢測(cè)people節(jié)點(diǎn)下所有的元素,如果發(fā)現(xiàn)有元素,則將元素的值輸出。其中符號(hào)是統(tǒng)配符,表示節(jié)點(diǎn)下所有的元素。2.4.5 xsl:choose, xsl:when 和 xsl:otherwisexsl:if語(yǔ)法沒(méi)有else的屬性。如果我們要進(jìn)行多項(xiàng)選擇,那么就要使用xsl:choose / xsl:when / xsl:otherwise系列流程控制語(yǔ)法了。具體的使用請(qǐng)看下面的xsl文件例子:no name available 說(shuō)明:首先在people節(jié)點(diǎn)下尋找屬性值為ajie的元素,如果找到,將ajie用粗體輸出;如果沒(méi)有發(fā)現(xiàn)值為ajie的元素,則將所有的元素的值都用斜體輸出;如果沒(méi)有發(fā)現(xiàn)任何元素,則顯示n

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論