使用XML+XSLT結(jié)構(gòu)的可能性
來(lái)源:易賢網(wǎng) 閱讀:781 次 日期:2015-08-26 15:29:21
溫馨提示:易賢網(wǎng)小編為您整理了“使用XML+XSLT結(jié)構(gòu)的可能性”,方便廣大網(wǎng)友查閱!

1 XML和XSL簡(jiǎn)介

1.1 XML

XML是可擴(kuò)展標(biāo)記語(yǔ)言(EXtensible Markup Language)的縮寫,它被設(shè)計(jì)用來(lái)傳輸和存儲(chǔ)數(shù)據(jù),并于1998年2月成為W3C的推薦標(biāo)準(zhǔn)。

名單

更為專業(yè)的描述是這樣的:在轉(zhuǎn)換的過(guò)程中,XSLT用Xpath來(lái)定義源文檔中與一個(gè)或多個(gè)預(yù)先確定的模板相匹配的部分。當(dāng)找到了一個(gè)匹配時(shí),XSLT就將源文檔中的匹配部分轉(zhuǎn)換成結(jié)果文檔;而源文檔中不與任何一個(gè)模板匹配的部分最終在結(jié)果中保持不變。(摘自developerWorks)

2.1 結(jié)構(gòu)示例

這里使用DNF的一個(gè)專題舉個(gè)例子。此專題的訪問(wèn)地址是:http://dnf.qq.com/act/a20090710wcg/

這是一個(gè)趕工的專題,頁(yè)面代碼沒太多的參考性,只是拿出來(lái)做個(gè)示例,并且由于專題比較簡(jiǎn)單,XSLT文檔只用到了部分XSLT語(yǔ)句,屬于簡(jiǎn)單應(yīng)用。首頁(yè)使用的是HTML,因?yàn)閄ML不在默認(rèn)首頁(yè)文件格式之列,因此只有二級(jí)頁(yè)采用了XML+XSLT結(jié)構(gòu)。對(duì)于其中“代表隊(duì)介紹”這個(gè)二級(jí)頁(yè)面:

XML文檔:http://dnf.qq.com/act/a20090710wcg/players.xml

XSLT文檔:http://dnf.qq.com/act/a20090710wcg/xslt/player.xsl,http://dnf.qq.com/act/a20090710wcg/xslt/commens.xsl

XML和XSLT是樹狀結(jié)構(gòu)的,在瀏覽器中可以看到。XSLT文檔中,以”<xsl:”開頭的就是XSLT語(yǔ)句,”select”屬性里的內(nèi)容則是Xpath表達(dá)式(Xpath表達(dá)式不只存在于select屬性里),可以看到里面也包含了許多HTML代碼。XML和XSLT代碼是強(qiáng)制要求閉合。

其中player.xml文檔調(diào)用了player.xsl文檔,XML文檔不做解釋了。簡(jiǎn)述一下XSLT的文檔結(jié)構(gòu)含義。

文檔第一排是一條XML聲明語(yǔ)句;第二行stylesheet語(yǔ)句聲明XSLT版本和命名空間,所有的其他XSLT語(yǔ)句都必須包含在此語(yǔ)句內(nèi);第三行是import語(yǔ)句,調(diào)用具有公共模塊的文檔commens.xsl(commens.xsl文檔包括頂部白色banner條,頁(yè)面header塊,導(dǎo)航,腳部聲明四個(gè)模塊);第四行是output語(yǔ)句,表明將XML文檔轉(zhuǎn)換為HTML文件并輸出;然后通過(guò)template語(yǔ)句建立根模塊。緊接著的就是HTML代碼了,<body>標(biāo)簽后是一個(gè)call-template語(yǔ)句,調(diào)用頂部白色banner條。HTML代碼就不再解釋了。接著的XSLT代碼是兩個(gè)call-template語(yǔ)句,調(diào)用HTML頁(yè)面header塊和導(dǎo)航模塊。跟著是兩個(gè)for-each語(yǔ)句循環(huán)相同的結(jié)構(gòu),并通過(guò)Xpath選取XML數(shù)據(jù),一個(gè)循環(huán)用于生成“個(gè)人賽”資料,另一個(gè)用于生成“團(tuán)隊(duì)賽”資料,中間有很多value-of語(yǔ)句,用于調(diào)用XML相應(yīng)節(jié)點(diǎn)的值。接著是call-template語(yǔ)句,調(diào)用腳部聲明模塊,最后是頁(yè)面的一些標(biāo)簽閉合。

3 XML+XSLT結(jié)構(gòu)的優(yōu)勢(shì)

3.1 數(shù)據(jù)交換

XML本身是用于網(wǎng)絡(luò)上數(shù)據(jù)交換的語(yǔ)言,我可以調(diào)用互聯(lián)網(wǎng)里的其他XML文件(當(dāng)然,要經(jīng)過(guò)作者同意),通過(guò)編寫XSLT或者其他語(yǔ)言腳本(如ActionScript、JavaScript等),變成自己作品上的內(nèi)容。

XML 是獨(dú)立于軟件和硬件的信息傳輸工具,它的簡(jiǎn)單使其易于在任何應(yīng)用程序中讀寫數(shù)據(jù)。我們?cè)谑褂肵SLT轉(zhuǎn)換XML為HTML的同時(shí),此XML文檔還可以被其他各種腳本或開發(fā)語(yǔ)言調(diào)用。

3.2 代碼大小

XSLT有個(gè)很大的優(yōu)點(diǎn)是模塊化,如同JavaScript里的function一樣,需要時(shí)調(diào)用,同時(shí)也可以傳遞參數(shù)。這樣,網(wǎng)站各個(gè)頁(yè)面所具有的相同部分(比如導(dǎo)航,版權(quán)聲明等,甚至可以是HTML里的<head>標(biāo)簽)就可以單獨(dú)提出來(lái),封裝在一個(gè)模塊內(nèi),每個(gè)頁(yè)面的這個(gè)部分就可以替換為一條調(diào)用對(duì)應(yīng)模塊的代碼。

XSLT同時(shí)擁有循環(huán)語(yǔ)句,可以對(duì)代碼里相同的結(jié)構(gòu)進(jìn)行循環(huán)(比如li、tr等),同時(shí)遍歷應(yīng)用這個(gè)結(jié)構(gòu)的XML數(shù)據(jù),避免了因擁有相同結(jié)構(gòu)的數(shù)據(jù)而重復(fù)編寫代碼。

XSLT文檔可以相互調(diào)用,延長(zhǎng)了文檔的使用壽命,你可以調(diào)用以前寫過(guò)的XSLT來(lái)使用里面的模塊,不用再次編寫,你甚至可以調(diào)用別人寫過(guò)并發(fā)布在互聯(lián)網(wǎng)上的文檔(只要作者同意),這樣在一定程度上節(jié)約了精力和成本。

XML+XSLT結(jié)構(gòu)大大減少了代碼大小,并且隨著XML數(shù)據(jù)量和頁(yè)面數(shù)量的增加而越發(fā)明顯。當(dāng)然,數(shù)據(jù)量大過(guò)頭對(duì)XML不是什么好事。

3.3 代碼維護(hù)

利用XSLT的模塊功能,對(duì)于頁(yè)面相同部分的修改變得很簡(jiǎn)單,不用像以前一樣打開N個(gè)文件批量替換,我們只需要對(duì)XSLT文件的模塊代碼進(jìn)行修改。雖然也可以利用JavaScript編寫各個(gè)頁(yè)面的相同部分,然后調(diào)用,但代碼的可讀性遠(yuǎn)遠(yuǎn)比不上XSLT的模塊來(lái)得直接。

利用XSLT的循環(huán)代碼,修改數(shù)據(jù)的結(jié)構(gòu)不再變得痛苦。想象當(dāng)你要把一個(gè)龐大的table結(jié)構(gòu)的數(shù)據(jù)變成li結(jié)構(gòu)時(shí),批量替換已無(wú)法滿足要求。如果使用XSLT文檔,并利用循環(huán)代碼,你只需要修改一個(gè)循環(huán)的公共結(jié)構(gòu)就OK了。

3.4 節(jié)約訪問(wèn)資源

對(duì)于現(xiàn)在騰訊的游戲官網(wǎng),比如首頁(yè)的各種新聞列表,是使用JavaScript調(diào)用的,即服務(wù)器接到請(qǐng)求后,再開始從數(shù)據(jù)庫(kù)里查找新聞,然后返回。

我們其實(shí)可以換一種方式,即后臺(tái)事先根據(jù)頁(yè)面需要生成XML文檔,并保持每隔一個(gè)固定時(shí)間更新一次XML文檔,然后使用XSLT輸出頁(yè)面,這樣就在一定程度上節(jié)省了頁(yè)面下載時(shí)間。

同時(shí),由于后臺(tái)直接生成XML文檔,不再因?yàn)镹個(gè)新聞列表而向服務(wù)器發(fā)送N個(gè)請(qǐng)求,減少了頁(yè)面的請(qǐng)求數(shù)。

4 使用XML+XSLT結(jié)構(gòu)的可能性

4.1 瀏覽器支持

幾乎所有主要的瀏覽器均支持 XML + XSLT結(jié)構(gòu)的頁(yè)面。Firefox從1.0.2開始支持XML和XSLT;Netscape從8.0開始支持XML和XSLT;Opera從9.0開始支持XML和XSLT;IE從6.0開始支持 XML、XSLT和Xpath(資料來(lái)源于W3School)。

當(dāng)然還有Safari和Chrome,貌似這兩個(gè)瀏覽器是支持的(至少我安裝的這兩個(gè)瀏覽器沒發(fā)現(xiàn)啥問(wèn)題)。

4.2 編寫難度

相對(duì)于HTML的編寫,XML+XSLT的過(guò)程要復(fù)雜一些。畢竟要先寫好XML、HTML、CSS和JavaScript文檔,然后再在HTML文檔的基礎(chǔ)上編寫XSLT文檔,多個(gè)頁(yè)面還需要根據(jù)文檔進(jìn)行模塊提取,以便各文檔調(diào)用。

從整個(gè)過(guò)程來(lái)看,確實(shí)復(fù)雜一些,但這個(gè)復(fù)雜也是“先苦后甜”的寫照。完成XSLT文檔后,可以節(jié)省很多資源,也對(duì)以后的維護(hù)有很大的好處。

4.3 后臺(tái)開發(fā)

需要程序員將數(shù)據(jù)庫(kù)里的數(shù)據(jù)按頁(yè)面需要導(dǎo)出為相應(yīng)的XML文件,或者直接使用XML存儲(chǔ)數(shù)據(jù)(但比如新聞之類的信息數(shù)量很龐大,使用XML直接存儲(chǔ)數(shù)據(jù)會(huì)降低效率)。各種開發(fā)語(yǔ)言都能將數(shù)據(jù)庫(kù)中的數(shù)據(jù)輸出為XML文檔,相信難度不大。

4.4 競(jìng)爭(zhēng)

XSLT當(dāng)然不是唯一能轉(zhuǎn)換XML文檔的方式,其他語(yǔ)言腳本也可以實(shí)現(xiàn)與XSLT相同的功能。但是,其他語(yǔ)言腳本的使用遠(yuǎn)不及XSLT來(lái)的直接。XSLT可以直接使用HTML元素,并且可以使用Xpath很直觀的選取XML文檔節(jié)點(diǎn)。而且在XML+XSLT結(jié)構(gòu)中,XML文檔的調(diào)用很方便,只需在XML文檔里寫一條xml-stylesheet調(diào)用語(yǔ)句。

4.5 SEO

這可能是XML+XSLT結(jié)構(gòu)最郁悶的地方了,網(wǎng)上貌似還沒有使用此結(jié)構(gòu)替換HTML對(duì)于SEO影響的定論。但各種跡象表明,使用XML+XSLT結(jié)構(gòu)會(huì)在一定程度上對(duì)SEO造成不良的影響。

4.6 適用性偏向

由于XML本身是作為描述和傳輸信息的文檔,注定了XML+XSLT結(jié)構(gòu)更適合于信息展示類的頁(yè)面,比如新聞,相冊(cè)等,所以游戲官網(wǎng)很適合使用此結(jié)構(gòu)來(lái)完成。而功能性較多的頁(yè)面就不適合使用此結(jié)構(gòu),比如注冊(cè),發(fā)布系統(tǒng)等。

暴雪公司的所有游戲官網(wǎng)均采用XML+XSLT結(jié)構(gòu)。

星際爭(zhēng)霸2:http://www.starcraft2.com/

魔獸世界:http://www.worldofwarcraft.com/

暗黑破壞神3:http://www.blizzard.com/diablo3/

5 綜上所述

XML+XSLT結(jié)構(gòu)目前并不流行,雖然XML已廣泛應(yīng)用,但XSL由于各種原因并未能普及。對(duì)于騰訊的游戲官網(wǎng)建設(shè),由于首頁(yè)的各類信息調(diào)用涉及到很多產(chǎn)品或系統(tǒng)的接口,而廣告和新聞也是還是使用JavaScript調(diào)用的方式生成,XML+XSLT結(jié)構(gòu)的全面應(yīng)用在短期來(lái)看是不大可能的,目前也只有用于純靜態(tài)的圖片視頻展示,資料站等。XML+XSLT結(jié)構(gòu)的普及任重而道遠(yuǎn)。

才疏學(xué)淺,個(gè)人愚見,僅供褻玩。

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:使用XML+XSLT結(jié)構(gòu)的可能性
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)