<msxsl:script> 元素

包含脚本块,所以自定义函数可以在 XSLT 转换中使用。 此元素是顶级元素。

<msxsl:script
  language = "language-name"
  implements-prefix = "prefix of user's namespace">
</msxsl:script>

特性

  • 语言
    用于此元素中定义的函数的活动脚本语言。 如果未指定,将使用 Microsoft® JScript®(与 ECMA 262 语言规范兼容)。 此属性接受与 HTML <SCRIPT> 元素上的 language 属性相同的值。

    对于托管代码,此属性接受 CreateProvider 所接受的语言名称。

  • implements-prefix
    必需。 将前缀与脚本块关联。 此属性的值是表示命名空间的前缀。

元素信息

出现次数

无限制

父元素

xsl:stylesheetxsl:transform

子元素

<msxsl:assembly> Element

<msxsl:using> Element

备注

<msxsl:script> 元素属于 urn:schemas-microsoft-com:xslt 命名空间。 可以在此元素中声明变量和定义函数。 此元素可能出现在 <xsl:stylesheet> 元素内。 这样嵌套的脚本块将作为全局脚本块对待。

<msxsl:assembly> 和 <msxsl:using> 子元素仅对 .NET Framework 内的托管代码可用。 在使用时,这两个元素必须位于脚本块的开头,位于任何脚本代码的前面。

在非托管代码中,您还可以实例化 <msxsl:script> 元素中的 COM 对象。 但是,用户的安全设置可能会使您的脚本无法实例化客户端对象。

为了获得高性能,避免使用 XSLT 文件中的脚本块,因为这些脚本块要求多次加载脚本引擎。 而应创建与脚本等效的 COM 对象,用于生成 DLL。 然后使用 addObject 并传递该 DLL。

示例

此示例演示如何使用 <msxsl:script> 来定义具有 user 命名空间前缀的脚本块,以便声明一个叫做 xml() 的函数。 xml() 函数采用节点列表作为参数。 请注意 user 命名空间中的这个 xml(nodelist) 函数是如何从 <xsl:value-of> 的 select 属性调用的。

XML 文件 (customers.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="script.xsl" ?>
<customers>
   <customer>
      <name>John Smith</name>
      <address>123 Elm St.</address>
      <phone>(123) 456-7890</phone>
   </customer>
   <customer>
      <name>Mary Jones</name>
      <address>456 Oak Ave.</address>
      <phone>(156) 789-0123</phone>
   </customer>
</customers>

XSLT 文件 (script.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:user="http://mycompany.com/mynamespace">

<msxsl:script language="JScript" implements-prefix="user">
   function xml(nodelist) {
      return nodelist.nextNode().xml;
   }
</msxsl:script>

<xsl:template match="/">
   <xsl:value-of select="user:xml(.)"/>
</xsl:template>

</xsl:stylesheet>

输出

以下是格式化输出:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="script.xsl" ?>
<customers>
  <customer>
    <name>John Smith</name>
    <address>123 Elm St.</address>
    <phone>(123) 456-7890</phone>
  </customer>
  <customer>
    <name>Mary Jones</name>
    <address>456 Oak Ave.</address>
    <phone>(156) 789-0123</phone>
  </customer>
</customers>

以下是处理器输出:

<?xml version="1.0"?>&lt;?xml version="1.0"?&gt;&lt;?xml-stylesheet
type="text/xsl" href="script.xsl" ?&gt;&lt;customers&gt;
&lt;customer&gt;  &lt;name&gt;John Smith&lt;/name&gt;  
&lt;address&gt;123 Elm St.&lt;/address&gt;  &lt;phone&gt;(123) 456-
7890&lt;/phone&gt; &lt;/customer&gt; &lt;customer&gt;  &lt;name&gt;Mary 
Jones&lt;/name&gt;  &lt;address&gt;456 Oak Ave.&lt;/address&gt;  
&lt;phone&gt;(156) 789-0123&lt;/phone&gt; 
&lt;/customer&gt;&lt;/customers&gt;