2011-10-04 70 views
14

我需要爲我的應用程序捆綁的html頁面提供模板機制。起初,我查看了所有的JavaScript模板解決方案(如jQuery模板),但由於我的輸入數據是XML,我突然再次記住了XSLT。我遇到了數十個庫文庫,但似乎沒有人使用XSLT,所以我完全忘記了它的存在,以及它對創建模板有多大用處。模板:XSLT vs jQuery

那麼,XSLT是否被JavaScript替代品慢慢棄用和逐步淘汰?我讀過某處XSLT對於大多數用戶來說太複雜了,但這是唯一的缺點還是有更多的缺點?

更新:我能想到的只有一個缺點的自己:用XSLT完整的頁面已被解析/顯示任何內容給用戶之前渲染,並使用JavaScript的網頁已經是可見的,並且缺少的元素填充之後。

+3

最大的「con」是XSLT可能給扁平的大腦帶來意想不到的皺紋。 :) –

+1

非常好評論!因爲使用xslt所有其他選項看起來如此漫長:P儘管剃刀看起來值得考慮。不要忘記,你仍然可以在你的模板中使用腳本! – Treemonkey

回答

7

XSLT是一個很好的模板解決方案。語言和語法有點不尋常 - 「選擇/何時」而不是「case/switch」是一個明顯的例子 - 但它的工作表現很好。

XSLT的主要優點是您不需要JavaScript來使用它;正確地構建它,每個主要的瀏覽器都會將它呈現爲HTML,無論JS是否啓用。在處理器上可能比JavaScript解決方案更容易,儘管我不知道有誰對此進行了測試。如果您已經在處理XML數據,那麼這也是明顯的選擇。

不足之處在於它是一種(相對)舊的技術,在很大程度上已被放棄,雖然瀏覽器仍然支持它,但它們並沒有向前推進。 Firefox有HTML轉義問題,他們有no intention of fixing,Chrome有a pretty major problem with @includes。 IE顯然是最新的,但這當然只適用於最新版本。

結果是,如果您想使用XSLT,您必須在所有主要瀏覽器中測試它並解決錯誤,儘管該技術至少在2006年已出現。它決不是不推薦使用,因爲它不像JSON + jQuery模板那樣緊湊或容易閱讀,所以它不是很流行。

+1

我想我要在服務器端渲染它。對於性能而言,這並不重要,因爲服務器/客戶端代碼都是在同一臺計算機上運行,​​因爲它是桌面應用程序,但它可以防止特定於瀏覽器的問題,例如您提到的問題。 – Muis

0

呈現瀏覽器中的XSLT有一些奇怪的瀏覽器特定的怪癖。如果我需要在客戶端渲染數據,我寧願使用jQuery模板。

在服務器端,XSLT是支持許多編程語言(至少對於XSLT 1.0,對於只能在Java和.NET之間進行選擇的XSLT 2.0)的優秀工具。所以也許你可以有一些中間件來獲取客戶端請求,將它傳遞給Web服務或者生成XML的任何東西,用XSLT樣式表將其呈現爲HTML並將HTML結果傳遞給瀏覽器。如果您的特定方案允許在中間件層進行緩存,則您的應用程序也將更快,因爲客戶端不必處理jQuery或XSLT模板。

+0

但您無法緩存動態數據,除了基於每個用戶的每個視圖。 – Andrew

8

XSLT是一種現代化的XML轉換和函數式編程語言。即將推出的版本3.0本身支持(與XPath 3.0一起)高階函數以及其他新功能。

XSLT不是「老」(很少有人知道XSLT 2.0或知道XSLT 3.0正在由W3C XSLT工作組處理)。

XSLT在瀏覽器中有一個最近大推向前Saxon CE - 一個下調XSLT 2.0處理器,它從Java編譯爲JavaScript,並提供客戶端上五大瀏覽器。@Michael Kay甚至在他的iPhone上演示了運行客戶端的XSLT 2.0 ...

+0

是否/何時微軟計劃在其開發平臺上支持XSLT 2.0? –

+0

對於服務器端轉換,它仍可能被使用,但對於客戶端我找不到任何使用它的人。唯一使用它的大型網站是暴雪魔獸世界門戶網站,甚至停止使用它。另外,當我查找與XSLT類似的東西時,除了JSON數據之外,沒有任何東西可以找到(除了一些概念證明)。所以如果這個概念還活着,爲什麼沒有人爲JSON開發類似的東西? – Muis

+1

JSON實際上是指緊湊的數據,而XML應該用於標記整個文檔。他們並不完全佔據相同的利基。 – Blazemonger

-1

以下是加載XML和XSL並在Javascript中執行轉換的示例。 http://www.w3schools.com/xsl/xsl_client.asp

有時無法在XML文檔中導入XSLT,例如從第三方獲取XML,並將XSLT轉換爲HTML並在瀏覽器中呈現。