Freigeben über


<msxsl:script>-Element

Enthält Skriptblöcke, damit benutzerdefinierte Funktionen in einer XSLT-Transformation verwendet werden können. Dies ist ein Element der obersten Ebene.

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

Attribute

  • language
    Die Active Scripting-Sprache, die für die in diesem Element definierten Funktionen verwendet wird. Wenn diese nicht angegeben wird, wird Microsoft® JScript® (kompatibel mit der Sprachspezifikation EMCA 262) verwendet. Dieses Attribut akzeptiert dieselben Werte wie das language-Attribut für das HTML-<SCRIPT>-Element.

    Bei verwaltetem Code akzeptiert dieses Attribut die Sprachennamen, die von CreateProvider akzeptiert werden.

  • implements-prefix
    Erforderlich. Ordnet das Präfix dem Skriptblock zu. Der Wert dieses Attributs ist das Präfix, das den Namespace darstellt.

Elementinformationen

Anzahl der Vorkommen

Unbegrenzt

Übergeordnete Elemente

xsl:stylesheet, xsl:transform

Untergeordnete Elemente

<msxsl:assembly> Element

<msxsl:using> Element

Hinweise

Das <msxsl:script>-Element gehört zum urn:schemas-microsoft-com:xslt-Namespace. Sie können in diesem Element Variablen deklarieren und Funktionen definieren. Dieses Element kann im <xsl:stylesheet>-Element angezeigt werden.Ein auf diese Weise geschachtelter Skriptblock wird als globaler Skriptblock behandelt.

Das untergeordnete <msxsl:assembly>-Element und das untergeordnete <msxsl:using>-Element sind für verwalteten Code nur in .NET Framework verfügbar.Wenn diese Elemente verwendet werden, müssen sie sich am Beginn des Skriptblocks vor jeglichem Skriptcode befinden.

Im nicht verwalteten Code können COM-Objekte auch im <msxsl:script>-Element instanziiert werden.Sicherheitseinstellungen des Benutzers können jedoch verhindern, dass das Skript ein clientseitiges Objekt instanziiert.

Zur Optimierung der Leistung sollten Sie Skriptblöcke aus XSLT-Dateien vermeiden, weil dafür das Skriptmodul mehrmals geladen werden muss. Stattdessen können Sie ein COM-Objekt erstellen, das dem Skript entspricht, wobei eine DLL generiert wird. Verwenden Sie anschließend addObject, und übergeben Sie die DLL.

Beispiel

In diesem Beispiel wird veranschaulicht, wie <msxsl:script> verwendet werden kann, um einen Skriptblock mit dem Namespacepräfix user zu definieren, der eine Funktion mit dem Namen xml() deklariert. Die Funktion xml() akzeptiert eine Knotenliste als Argument. Beachten Sie, wie die Funktion xml(nodelist) im user-Namespace vom select-Attribut von <xsl:value-of> aufgerufen wird.

XML-Datei (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-Datei (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>

Ausgabe

Dies ist die formatierte Ausgabe:

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

Die Prozessorausgabe lautet:

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