簡體   English   中英

將XSLT 1.0升級到XSLT 2.0

[英]Upgrading XSLT 1.0 to XSLT 2.0

從XSLT 1.0升級到2.0涉及什么?
1 - 升級的可能原因是什么?
2 - 不升級的可能原因是什么?
3 - 最后,升級的步驟是什么?

我希望有一個執行摘要 - 簡短的版本:)

從XSLT 1.0升級到2.0涉及什么?

1 - 升級的可能原因是什么?

如果您是XSLT程序員,您將從更方便和富有表現力的XSLT 2.0語言+ XPath 2.0和新的XDM(XPath數據模型)中受益。

您可能希望觀看此XSLT 2.0 Pluralsight課程,以便對XSLT 2.0的強大功能有一個堅定而系統的了解

你有:

  • 強類型和所有XSD類型可用。

  • 定義自己的(模式)類型的能力。

  • 在XPath 1.0中沒有任何對應物(簡單地丟失)的XPath 2.0序列類型。

  • 在純XSLT中定義和編寫函數的能力 - xsl:function指令。

  • XPath表達式中的范圍變量( for子句)。

  • 更好更強大的字符串處理 - XPath 2.0支持其tokenize()matches()replace()函數中的正則表達式。

  • 更好,更強大的字符串處理 - XSLT 2.0支持正則表達式 - xsl:analyze-stringxsl:matching-substringxsl:non-matching-substring新的XSLT指令。

  • 更方便,更強大和富有表現力的分組: xsl:for-each-group指令。

  • 許多新的,非常強大的XPath 2.0功能 - 例如日期,時間和持續時間的功能,僅舉幾例。

  • 新的XPath運算符intersectexceptis>><<someeveryinstance ofcastable as ,......等等

  • 一般的XPath運算符><等現在可以處理任何有序的值類型(不僅僅是在XPath 1.0中的數字)。

  • 新的,更安全的價值比較運算符: ltleeqgtgene

  • XPath 2.0 to運算符,允許xsl:for-each select="1 to $N"

這些以及許多其他改進/新功能顯着提高了任何XSLT程序員的工作效率,這使得XSLT 2.0開發能夠在使用XSLT 1.0開發相同模塊所需的一小部分時間內完成。

強類型允許在編譯時捕獲許多錯誤並立即糾正。 對我來說,這種強大的類型安全性是使用XSLT 2.0的最大優勢。

2 - 不升級的可能原因是什么?

  • 通常可以,合理且經濟高效地保留現有的舊版XSLT 1.0應用程序,並繼續將它們與XSLT 1.0一起使用,同時僅使用XSLT 2.0開發新的應用程序。

  • 您的管理層+任何其他非技術原因。

  • 有很多遺留的XSLT 1.0應用程序以糟糕的方式編寫(例如,使用現在需要重寫的DOE或擴展函數並重構代碼)。

  • 沒有XSLT 2.0處理器。

3 - 最后,升級的步驟是什么?

  • xsl:stylesheetxsl:transform元素的version屬性從"1.0"更改為"2.0"

  • 刪除任何xxx:node-set()函數。

  • 刪除任何DOE。

  • 准備好讓xsl:value-of現在輸出的不僅僅是第一個,而是序列的所有項目。

  • 嘗試盡可能多地使用新的xsl:sequence指令 - 用它來替換任何xsl:copy-of指令; 當輸出的類型不是字符串或文本節點時xsl:value-of任何時候使用它代替xsl:value-of

  • 廣泛測試。

  • 當測試驗證代碼按預期工作時,開始重構(如果認為有必要)。 為任何變量,參數,模板和函數聲明類型是個好主意。 這樣做可能會揭示新的隱藏錯誤,修復它們會提高代碼質量。

  • (可選)決定將哪些命名模板重寫為xsl:function

  • 確定您是否仍需要舊版本中使用的某些擴展函數,或者您可以使用XSLT的強大新功能輕松地重寫它們。

最后的評論 :並非所有上述步驟都是必要的,並且可以停止並在零錯誤測試結果上聲明遷移成功。 項目中開始使用所有XSLT 2.0 / XPath 2.0功能要清晰得多。

Dimitre的答案非常全面,100%准確(一如既往),但有一點我會補充。 升級到2.0處理器時,您可以選擇將版本屬性設置為“1.0”並以“向后兼容模式”運行,或將版本屬性更改為“2.0”。 人們經常會問建議使用哪種方法。

我的建議是,如果你對樣式表有一套很好的測試,請選擇:set version =“2.0”,運行測試,如果有任何問題,請修復它們。 通常問題是代碼從一開始就不是正確的,只是偶然的。 但是如果你沒有一套好的測試並且擔心工作負載的可靠性,那么保留version =“1.0”是一種風險較低的方法:處理器將模擬XSLT 1.0的所有怪癖,例如: xsl:value-of忽略除第一項之外的所有項,以及用於將數字與字符串進行比較的奇怪規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM