Umbraco/示例和文章/XSLT/扩展 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