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

1 XML和XSL簡介

1.1 XML

XML是可擴展標記語言(EXtensible Markup Language)的縮寫,它被設(shè)計用來傳輸和存儲數(shù)據(jù),并于1998年2月成為W3C的推薦標準。

名單

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

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

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

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

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語句,”select”屬性里的內(nèi)容則是Xpath表達式(Xpath表達式不只存在于select屬性里),可以看到里面也包含了許多HTML代碼。XML和XSLT代碼是強制要求閉合。

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

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

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

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

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

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

3.2 代碼大小

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

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

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

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

3.3 代碼維護

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

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

3.4 節(jié)約訪問資源

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

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

同時,由于后臺直接生成XML文檔,不再因為N個新聞列表而向服務(wù)器發(fā)送N個請求,減少了頁面的請求數(shù)。

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

4.1 瀏覽器支持

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

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

4.2 編寫難度

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

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

4.3 后臺開發(fā)

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

4.4 競爭

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

4.5 SEO

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

4.6 適用性偏向

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

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

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

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

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

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機網(wǎng)站地址:使用XML+XSLT結(jié)構(gòu)的可能性

2025國考·省考課程試聽報名

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