Altova RaptorXML Server 2024

L'élément <msxsl:script> contient des fonctions définies par l'utilisateur et des variables qui peuvent être appelées depuis des expressions XPath dans la feuille de style XSLT. Le <msxsl:script> et un élément de niveau supérieur, c'est à dire, qu'il doit être un élément enfant de <xsl:stylesheet> ou <xsl:transform>.

 

L'élément <msxsl:script> doit être dans l'espace de nom urn:schemas-microsoft-com:xslt (voir exemple ci-dessus).

 

Langage de script et espace de nom

Le langage de script utilisé dans le bloc est spécifié dans l'attribut language de l'élément <msxsl:script> et l'espace de nom à utiliser pour les appels de fonction depuis les expressions XPath est identifié avec l'attribut implements-prefix (voir ci-dessous).

 

<msxsl:script language="scripting-language" implements-prefix="user-namespace-prefix">

 

  function-1 or variable-1

  ...

  function-n or variable-n

 

</msxsl:script>

 

L'élément <msxsl:script> interagit avec le Windows Scripting Runtime, donc seuls des langages installés sur votre machine peuvent être utilisés dans l'élément <msxsl:script>. La plate-forme .NET Framework 2.0 ou plus récente doit être installée pour pouvoir utiliser les scripts MSXSL. Par conséquent, les langages de script .NET peuvent être utilisés dans l'élément <msxsl:script>.

 

L'attribut de langage doit accepter les mêmes valeurs que l'attribut language dans l'élément HTML <script>. Si l'attribut de langage n'est pas spécifié, alors Microsoft JScript est assumé par défaut.

 

L'attribut implements-prefix prend une valeur qui est un préfixe d'un nom d'espace in-scope déclaré. Cet espace de nom sera généralement un espace de nom d'utilisateur qui a été réservé pour une librairie de fonction. Toutes les fonctions et les variables définies dans l'élément <msxsl:script> se trouveront dans l'espace de nom identifié par le préfixe spécifié dans l'attribut implements-prefix. Lorsqu'une fonction est appelée depuis une expression XPath, le nom de la fonction entièrement qualifié doit se trouver dans le même espace de nom que la définition de la fonction.

 

Exemple

Voici un exemple d'une feuille de stype XSLT complète qui utilise une fonction définie dans un élément <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>

 

Types de données

Les valeurs des paramètres passés dans et hors du bloc de script sont limitées aux types de données XPath. Cette restriction ne s'applique pas aux données passées parmi les fonctions et les variables dans le bloc du script.

 

Assemblages

Un assemblage peut être importé dans le script en utilisant l'élément msxsl:assembly. L'assemblage est identifié par le biais d'un nom ou d'un URI. L'assemblage est importé lors de la compilation de la feuille de style. Voici une simple représentation de la manière d'utiliser l'élément msxsl:assembly.

 

<msxsl:script>

 <msxsl:assembly name="myAssembly.assemblyName" />

 <msxsl:assembly href="pathToAssembly" />

 

 ...

 

</msxsl:script>

 

Le nom d'assemblage peut être un nom complet comme :

 

"system.Math, Version=3.1.4500.1 Culture=neutral PublicKeyToken=a46b3f648229c514"

 

ou un nom court comme "myAssembly.Draw".

 

Espaces de nom

Les espaces de nom peuvent être déclarés avec l'élément msxsl:using. Cela permet aux classes d'assemblage d'être écrits dans le script sans leurs espaces de nom, ce qui vous épargne un gros travail de saisie. Voici comment l'élément msxsl:using est utilisé de manière à déclarer des espaces de nom.

 

<msxsl:script>

 <msxsl:using namespace="myAssemblyNS.NamespaceName" />

 

 ...

 

</msxsl:script>

 

La valeur de l'attribut namespace est le nom de l'espace de nom.

 

© 2017-2023 Altova GmbH