Поделиться через


Элемент <msxsl:script>

Содержит блоки скриптов, позволяющие применять в преобразовании XSLT пользовательские функции. Это элемент верхнего уровня.

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

Атрибуты

  • язык
    Язык активных скриптов, используемый для функций, определенных в этом элементе. Если этот атрибут не задан, то используется язык Microsoft® JScript® (совместимый с языковой спецификацией ECMA 262). Этот атрибут принимает те же значения, что и атрибут language в элементе HTML <SCRIPT>.

    В управляемом коде этот атрибут принимает названия языков, которые являются допустимыми аргументами функции CreateProvider.

  • implements-prefix
    Обязательный. Связывает префикс с блоком скрипта. Значением этого атрибута является префикс, соответствующий пространству имен.

Сведения об элементе

Количество вхождений

Без ограничений

Родительские элементы

xsl:stylesheet, xsl:transform

Дочерние элементы

<msxsl:assembly> Element

<msxsl:using> Element

Заметки

Элемент <msxsl:script> принадлежит пространству имен urn:schemas-microsoft-com:xslt. Внутри этого элемента можно объявлять переменные и определять функции. Этот элемент может существовать внутри элемента <xsl:stylesheet>. Вложенный таким образом блок скриптов ведет себя как глобальный блок скриптов.

Дочерние элементы <msxsl:assembly> и <msxsl:using> доступны только для управляемого кода на платформе .NET Framework. Когда эти элементы используются, они должны находиться в начале блока скриптов до любого кода скрипта.

В неуправляемом коде можно также создавать экземпляры COM-объектов в элементе <msxsl:script>. Однако параметры безопасности пользователя могут не позволить скрипту создать экземпляр объекта на клиенте.

Из соображений производительности не рекомендуется создавать блоки скриптов из файлов XSLT, поскольку они требуют многократной загрузки обработчика скриптов. Вместо этого рекомендуется создать COM-объект, эквивалентный скрипту и скомпонованный в виде динамической библиотеки. Затем можно применить функцию addObject, передав ей эту динамическую библиотеку.

Пример

Данный пример иллюстрирует определение блока скриптов с префиксом пространства имен user с помощью элемента <msxsl:script> - для объявления функции с именем xml(). Функция xml() использует в качестве аргумента список узлов. Обратите внимание, как эта функция xml(nodelist) пространства имен user вызывается из атрибута select элемента <xsl:value-of>.

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;