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