Altova XMLSpy 2024 Enterprise Edition

<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特性的值是该命名空间的名称。

 

© 2017-2023 Altova GmbH