跳至內容

Umbraco/示例和文章/XSLT/擴充套件 Xsl

來自華夏公益教科書,開放世界的開放書籍

使用 Javascript、VB 或 C# 擴充套件 XSL

[編輯 | 編輯原始碼]

最初來自http://www.umbraco.org/frontpage/documentation/articles/sampleofthemonth.aspx

在使用 xsl 開發時,該語言有時會顯得不足,或者難以實現其他程式語言輕鬆完成的任務,而且耗時。

在 umbraco 郵件列表中回答一個問題時,發現使用您最喜歡的程式語言的內聯程式碼擴充套件 xsl 並不是常識,但實際上非常容易做到。

使用內聯伺服器解釋的 Javascript 的示例。

<?xml version="1.0" encoding="UTF-8"?>
	<xsl:stylesheet 
		version="1.0"    
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   		xmlns:msxml="urn:schemas-microsoft-com:xslt"    
		xmlns:msxsl="urn:schemas-microsoft-com:xslt"    
		xmlns:math="http://exslt.org/math"    
		xmlns:umbraco.library="urn:umbraco.library"    
		exclude-result-prefixes="msxml math umbraco.library"> 
		
		<xsl:output method="html"/> 
			<xsl:param 
				name="currentPage"/> 
				
				<msxsl:script 
					language="JavaScript" 
					implements-prefix="math"> 
						<![CDATA[ 
						function random(){ 
							return Math.random();
						} 
						]]> 
				</msxsl:script> 
				<xsl:template match="/">
					<xsl:variable 
						name="nodeset" 
						select="$currentPage/node"/> 
						
						<xsl:value-of 
							select="$nodeset[floor(math:random() * (last() -1)) + 1]"/> 
				</xsl:template> 
	</xsl:stylesheet> 

以上示例展示瞭如何從節點集中獲取隨機節點,使用包裝器來包裝 Javascript 中的 "Math.random()" 函式,以生成隨機種子。

Javascript 在伺服器端執行 - 實際上任何定義的函式都會被編譯為 MSIL(包裝在類定義中),因此對總體效能的影響很小 - 其他場景可能會導致效能開銷,但是 - 在即將釋出的 Umbraco v. 2.1 中 - 可以快取宏的輸出,因此應該可以保持高效能,同時在開發中保持靈活性。

您可以使用不同的程式語言,可以在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconXSLTStylesheetScriptingUsingMsxslscript.asp找到完整的列表和更多資訊。

作者:Kasper Bumbech Andersen

華夏公益教科書