<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    [導(dǎo)入]xslt有什么用

    Posted on 2006-03-05 00:02 canonical 閱讀(863) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)理論

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

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

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

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

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

         xslt的另一個(gè)問(wèn)題是有時(shí)xml語(yǔ)法顯得過(guò)于冗長(zhǎng)了。在操縱一些局部結(jié)構(gòu)的時(shí)候,xml節(jié)點(diǎn)并不一定是合適的表達(dá)。例如

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


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

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


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

    主站蜘蛛池模板: 亚洲福利一区二区精品秒拍| 黄网站色视频免费看无下截| 亚洲日本久久一区二区va| 国产在线精品一区免费香蕉| 四虎永久免费观看| 久久精品国产亚洲AV未满十八| 国产成人免费高清激情明星| 久久久久久久久亚洲 | 成年人免费观看视频网站| 国产精品亚洲色图| 午夜dj免费在线观看| 97在线视频免费公开视频| 亚洲午夜在线一区| 亚洲熟妇无码另类久久久| 成人一区二区免费视频| 国产亚洲精品久久久久秋霞 | 国产片AV片永久免费观看| 亚洲日韩精品一区二区三区无码| 1000部羞羞禁止免费观看视频| 亚洲精品天天影视综合网| 国产小视频在线免费| 69av免费观看| aa级毛片毛片免费观看久| 在线观看亚洲AV日韩A∨| 亚洲av无码一区二区乱子伦as| 日本高清免费不卡视频| 亚州免费一级毛片| 两个人看www免费视频| 含羞草国产亚洲精品岁国产精品| 亚洲综合激情九月婷婷| 色久悠悠婷婷综合在线亚洲| 在线观看永久免费视频网站| 国产成人精品免费视频大全麻豆| 拍拍拍无挡免费视频网站| 国产精品亚洲综合天堂夜夜| 亚洲国产精品xo在线观看| 久久综合九九亚洲一区| 国产精品V亚洲精品V日韩精品 | 朝桐光亚洲专区在线中文字幕 | 亚洲精品无码MV在线观看| 亚洲国产主播精品极品网红|