日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

xslt有什么用--canonical_cqh

 grantbb 2005-07-15

     adun今天問我xslt到底有什么用。相對于其他技術,它有什么存在的必要性。
    xslt的主要作用是對xml結(jié)構(gòu)的轉(zhuǎn)換,即它是一種描述結(jié)構(gòu)變換規(guī)則的語言。不過也可以將它與我們更熟悉的用于生成html(結(jié)構(gòu))的模板語言作一個對比。
1. 兩者都能直接生成xml格式的文本(結(jié)構(gòu))
2. 兩者都有循環(huán)和判斷等邏輯處理語句。
3. 模板語言可以通過EL表達式等語言取得源數(shù)據(jù), xslt通過xpath語法取得源數(shù)據(jù).
4. 模板語言通過自定義tag等機制實現(xiàn)分解和組合, xslt通過xsl:call-template等語法實現(xiàn)分解與組合.

     tpl等模板語言直接操縱java中的對象, 體現(xiàn)的是圖(Graph)模型, 并通過對象函數(shù)封裝了部分動態(tài)性. 一般訪問的時候是通過短程關系逐級訪問,例如x.y.funcA().b。利用apache項目組的jxpath包,我們也可以使用類似于xpath的語法在對象圖上進行全局訪問。
    xslt使用嚴格定義的xpath語法訪問Tree結(jié)構(gòu),具有很強的數(shù)據(jù)操縱能力,例如我們可以通過//mynode等語法輕易的實現(xiàn)節(jié)點的聚合,構(gòu)造出新的結(jié)構(gòu)。在一般xslt包的實現(xiàn)中,都提供了javascript擴展,可以使用javascript構(gòu)造出的數(shù)據(jù)節(jié)點。

     在tpl這樣的模板語言中java中的數(shù)據(jù)對象結(jié)構(gòu)與tpl中的模板結(jié)構(gòu)(處理規(guī)則的結(jié)構(gòu))是兩分的,而在xslt中輸入數(shù)據(jù)結(jié)構(gòu)與xslt自身處理規(guī)則的機構(gòu)卻是統(tǒng)一的。實際上tpl這樣的模板語言主要是基于過程語義,即先做。。。,用到。。。,然后。。。, 而xslt對于輸入數(shù)據(jù)的結(jié)構(gòu)具有明確的全局性假設,主要是一種轉(zhuǎn)換語義,即不論在什么情況下,只要遇到。。。,就做。。。。 在xslt中可以通過xpath語法指定處理規(guī)則針對數(shù)據(jù)(輸入結(jié)構(gòu))的的觸發(fā)條件, 而在tpl中只能通過<c:decorator>為tpl標簽指定轉(zhuǎn)換器,而無法針對數(shù)據(jù)指定處理規(guī)則。

     在數(shù)據(jù)訪問模型這一方面,原則上說xslt與模板語言各有優(yōu)勢。實際在用于html生成的過程中,xpath的全局訪問和匹配能力一般難以得到發(fā)揮,而xml格式的限制又在一定程度上阻礙了使用靈活的數(shù)據(jù)供體,這方面模板語言有一定的優(yōu)勢。但是xslt的約束更強也有本質(zhì)性的好處,它使用xml數(shù)據(jù)并輸出xml數(shù)據(jù),維護了結(jié)構(gòu)的同質(zhì)性,便于管道操作。因為假設更明確,xslt對于xml格式的數(shù)據(jù)的操縱和封裝能力也要強于模板語言。例如它可以使用來為節(jié)點追加屬性。

     xslt在用于xhtml生成時的一個主要劣勢在于它是對變換規(guī)則的分解之后的描述,而我們所希望得到的是最終的結(jié)果,即這些規(guī)則綜合應用所生成的結(jié)果。雖然xslt的語法是xml語言,與xhtml在語法格式上保持了一致性。但是在xslt中,xslt的標簽破壞了xhtml語義上的結(jié)構(gòu),使得目前無法做到所見即所得。我們不得不在頭腦中運行xslt規(guī)則來想象最終的結(jié)果,這無疑是痛苦的。模板語言在這方面要輕松許多。

     xslt的另一個問題是有時xml語法顯得過于冗長了。在操縱一些局部結(jié)構(gòu)的時候,xml節(jié)點并不一定是合適的表達。例如

<xsl:value-of select="$x"/> 對比 ${x},


<xsl:call-template name="subrule">
    <xsl:with-param name="argA"><xsl:value-of select="substring-after($path,‘.‘)"/></xsl:with-param>
</xsl:call-template>
對比
<my:subrule argA="${path.substringAfter(‘.‘)}" />

在調(diào)用子模板方面,顯然xslt封裝的抽象層次也要弱于tpl模板語言。


     xslt作為一種xml格式的結(jié)構(gòu)變換語言,維護了xml世界的概念完整性,其意義無疑是重大的。但并不是所有時候xml都是最適的描述模型。我們最好還是將它與其他技術結(jié)合使用。目前在witrx平臺中,我們對于xslt的使用主要是對tpl模板進行布局和過濾處理,即xslt用于對處理規(guī)則進行變換,而將根據(jù)數(shù)據(jù)生成html這個最細致的工作留給過程處理能力和封裝能力更強的tpl模板語言。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多