Elemento <msxsl:script>

Contiene bloques de scripts, así que es posible utilizar funciones personalizadas en una transformación XSLT. Se trata de un elemento de nivel superior.

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

Atributos

  • lenguaje
    El lenguaje de scripts activos que se utiliza en las funciones definidas en este elemento. Si se deja sin especificar, se utiliza Microsoft® JScript® (compatible con la especificación de lenguaje ECMA 262). Este atributo acepta los mismos valores que el atributo language del elemento HTML <SCRIPT>.

    En el caso de código administrado, este atributo acepta los nombres de lenguajes que acepta CreateProvider.

  • implements-prefix
    Necesario. Asocia el prefijo con el bloque de script. El valor de este atributo es el prefijo que representa el espacio de nombres.

Información del elemento

Número de apariciones

Ilimitado

Elementos primarios

xsl:stylesheet, xsl:transform

Elementos secundarios

<msxsl:assembly> Element

<msxsl:using> Element

Comentarios

El elemento <msxsl:script> pertenece al espacio de nombres urn:schemas-microsoft-com:xslt. Puede declarar variables y definir funciones en este elemento. Este elemento puede aparecer dentro del elemento <xsl:stylesheet>.Un bloque de script así anidado se trata como un bloque de script global.

Los elementos secundarios <msxsl:assembly> y <msxsl:using> sólo están disponibles para código administrado en .NET Framework.Cuando se utilizan, estos elementos deben estar al principio del bloque de script, delante de cualquier código de script.

En código sin administrar, también puede crear instancias de objetos COM en el elemento <msxsl:script> element.No obstante, la configuración de seguridad de un usuario podría impedir que el script creara una instancia de un objeto de cliente.

Para obtener un alto rendimiento, evite bloques de scripts de archivos XSLT, dado que requieren que se cargue el motor de scripts varias veces. En su lugar, cree un objeto COM que sea equivalente al script, generando una DLL. A continuación, utilice addObject y pase la DLL.

Ejemplo

Este ejemplo muestra cómo utilizar <msxsl:script> para definir un bloque de script con un prefijo de espacio de nombres de user para declarar una función llamada xml(). La función xml() toma una lista de nodos como argumento. Observe cómo se llama a esta función, xml(nodelist) en el espacio de nombres user, desde el atributo select de <xsl:value-of>.

Archivo 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>

Archivo 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>

Resultados

Este es el resultado con formato:

<?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>

Este es el resultado del procesador:

<?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;