针对XSLT的MSXSL脚本
<msxsl:script>元素包含用户定义的函数和变量,可以在XSLT样式表的XPath表达式中调用。<msxsl:script>是一个顶级元素,也就是说,它必须是<xsl:stylesheet>或<xsl:transform>的子元素。
<msxsl:script>元素必须在命名空间urn:schemas-microsoft-com:xslt中(参见下方示例)。
脚本语言和命名空间
块内使用的脚本语言是在<msxsl:script>元素的language特性中指定的,并且用于XPath表达式中的函数调用的命名空间是用implements-prefix特性标识的(参见下文)。
<msxsl:script language="scripting-language" implements-prefix="user-namespace-prefix">
function-1 or variable-1
...
function-n or variable-n
</msxsl:script>
<msxsl:script>元素与Windows Scripting Runtime交互,因此只能在<msxsl:script>元素中使用您机器上安装的语言。为了使用MSXSL脚本,必须安装.NET Framework 2.0平台或更高版本。这样,可以在<msxsl:script>元素中使用.NET脚本语言。
language特性接受的值与HTML <script>元素的language特性相同。如果未指定language特性,则会将Microsoft JScript用作默认值。
implements-prefix特性会采用一个已声明的范围内命名空间的前缀作为其值。该命名空间通常是一个为函数库保留的用户命名空间。所有在<msxsl:script>元素中定义的函数和变量都在由implements-prefix特性指定的前缀所标识的命名空间中。当在一个XPath表达式中调用一个函数时,完全限定的函数名必须在函数定义所在的命名空间中。
示例
以下示例是一个完整的XSLT样式表,其中使用了一个在<msxsl:script>元素中定义的函数。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://mycompany.com/mynamespace">
<msxsl:script language="VBScript" implements-prefix="user">
<![CDATA[
' Input: A currency value: the wholesale price
' Returns: The retail price: the input value plus 20% margin,
' rounded to the nearest cent
dim a as integer = 13
Function AddMargin(WholesalePrice) as integer
AddMargin = WholesalePrice * 1.2 + a
End Function
]]>
</msxsl:script>
<xsl:template match="/">
<html>
<body>
<p>
<b>Total Retail Price =
\$<xsl:value-of select="user:AddMargin(50)"/>
</b>
<br/>
<b>Total Wholesale Price =
\$<xsl:value-of select="50"/>
</b>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
数据类型
传入和传出脚本块的参数值被限制于XPath数据类型。这一限制并不适用于在脚本块内函数和变量之间传递的数据。
程序集
一个程序集可以使用msxsl:assembly元素导入到脚本中。程序集由一个名称或URI标识。程序集在样式表被编译时导入。以下是一个简单的示例,展示了如何使用msxsl:assembly 元素。
<msxsl:script>
<msxsl:assembly name="myAssembly.assemblyName" />
<msxsl:assembly href="pathToAssembly" />
...
</msxsl:script>
程序集名称可以是一个完整名称,例如:
"system.Math, Version=3.1.4500.1 Culture=neutral PublicKeyToken=a46b3f648229c514"
或一个短名称,例如"myAssembly.Draw"。
命名空间
命名空间可以在msxsl:using元素中声明。这样就可以在不输入命名空间的情况下将程序集类写入脚本,从而节省了一些繁琐的打字工作。以下示例展示了如何用msxsl:using元素来声明命名空间。
<msxsl:script>
<msxsl:using namespace="myAssemblyNS.NamespaceName" />
...
</msxsl:script>
namespace特性的值是该命名空间的名称。