Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

Élément <msxsl:script>

Contient des blocs de script permettant d'utiliser des fonctions personnalisées dans une transformation XSLT. Il s'agit d'un élément de niveau supérieur.

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

language

Langage Active Scripting utilisé pour les fonctions définies dans cet élément. Si ce langage n'est pas spécifié, Microsoft® JScript® (compatible avec la spécification de langage ECMA 262) est utilisé. Cet attribut accepte les mêmes valeurs que l'attribut language de l'élément HTML <SCRIPT>.

Pour un code managé, cet attribut accepte les noms de langages acceptés par la méthode CreateProvider.

implements-prefix

Requis. Associe le préfixe au bloc de script. La valeur de cet attribut est le préfixe qui représente l'espace de noms.

Nombre d'occurrences

Illimité

Éléments parents

xsl:stylesheet, xsl:transform

Éléments enfants

<msxsl:assembly> Element

<msxsl:using> Element

L'élément <msxsl:script> appartient à l'espace de noms urn:schemas-microsoft-com:xslt. Vous pouvez y déclarer des variables et définir des fonctions. Cet élément peut apparaître dans l'élément <xsl:stylesheet>. Un bloc de script imbriqué de cette façon est traité comme un bloc de script global.

Les éléments enfants <msxsl:assembly> et <msxsl:using> ne sont disponibles que pour du code managé dans le .NET Framework. Lorsqu'ils sont utilisés, ces éléments doivent se trouver au début du bloc de script, avant tout code de script.

Dans un code non managé, vous pouvez également instancier des objets COM dans l'élément <msxsl:script>. Toutefois, les paramètres de sécurité d'un utilisateur peuvent empêcher votre script d'instancier un objet côté client.

Pour des performances optimales, évitez de placer des blocs de script dans des fichiers XSLT, car ils exigent de charger le moteur de script plusieurs fois. Créez plutôt un objet COM équivalent au script, produisant une DLL. Utilisez ensuite addObject et transmettez la DLL.

Cet exemple montre comment utiliser <msxsl:script> pour définir un bloc de script avec un préfixe d'espace de noms de user pour déclarer une fonction appeléexml(). La fonction xml() prend une liste de nœuds comme argument. Notez comment cette fonction, xml(nodelist) de l'espace de noms user, est appelée à partir de l'attribut select de <xsl:value-of>.

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


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


Sortie

Voici les données en sortie formatées :

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

Voici les données en sortie du processeur :

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