.NET-Erweiterungsfunktionen

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Anhänge > Informationen zu den Prozessoren > XSLT- und XPath/XQuery-Funktionen > Diverse Erweiterungsfunktionen >

.NET-Erweiterungsfunktionen

Wenn Sie auf einem Windows-Rechner mit der .NET-Plattform arbeiten, können Sie Erweiterungsfunktionen verwenden, die in jeder beliebigen der .NET-Sprachen geschrieben wurden (z.B. C#). Eine .NET Erweiterungsfunktion kann in einem XPath- oder XQuery-Ausdruck verwendet werden, um einen Konstruktor, eine Eigenschaft oder Methode (statische oder Instanz) in einer .NET-Klasse aufzurufen.

 

Eine Eigenschaft einer .NET-Klasse wird mit der Syntax get_PropertyName() aufgerufen.

 

Dieser Abschnitt ist in die folgenden Unterabschnitte gegliedert:

 

.NET: Konstruktoren
.NET: Statische Methoden und statische Felder
.NET: Instanzmethoden und Instanzfelder
Datentypen: XPath/XQuery in .NET
Datentypen: .NET in XPath/XQuery

 

 

Form der Erweiterungsfunktion

Die Erweiterungsfunktion im XPath/XQuery-Ausdruck muss die folgende Form haben präfix:fname().

 

Der Teil präfix: ist mit einer URI verknüpft, die die benötigte .NET-Klasse definiert.
Der Teil fname() identifiziert den Konstruktor, die Eigenschaft oder die Methode (statisch oder Instanz) innerhalb der .NET-Klasse und liefert alle gegebenenfalls benötigten Argumente.
Die URI muss mit clitype: beginnen (welches die Funktion als .NET-Erweiterungsfunktion kennzeichnet).
Die Form prefix:fname() der Erweiterungsfunktion kann mit Systemklassen und mit Klassen in einer geladenen Assembly verwendet werden. Wenn eine Klasse allerdings geladen werden muss, müssen zusätzliche Parameter mit den benötigten Informationen bereitgestellt werden.

 

 

Parameter

Zum Laden einer Assembly werden die folgenden Parameter verwendet:

 

asm

Der Name der zu ladenden Assembly

ver

Die Versionsnummer: eine Maximalzahl von vier Ganzzahlen, die durch Punkte getrennt sind

sn

Das Key Token des Strong Name der Assembly (16 Hex-Stellen).

from

Eine URI gibt den Pfad der zu ladenden Assembly (DLL) an. Wenn die URI relativ ist, ist sie relativ zum XSLT- oder XQuery-Dokument. Wenn dieser Parameter vorhanden ist, werden alle anderen Parameter ignoriert.

partialname

Der partielle Name der Assembly. Er wird für Assembly.LoadWith.PartialName() bereitgestellt, welches versuchen wird, die Assembly zu laden. Wenn partialname vorhanden ist, werden alle anderen Parameter ignoriert.

loc

Die Locale, z.B. en-US. Die Standardeinstellung ist neutral

 

Wenn die Assembly aus einer DLL geladen werden soll, verwenden Sie den from Parameter und lassen Sie den sn Parameter weg. Wenn die Assembly aus dem Global Assembly Cache (GAC) geladen werden soll, verwenden Sie den sn Parameter und lassen Sie den from Parameter weg.

 

Vor dem ersten Parameter muss ein Fragezeichen eingefügt werden. Parameter müssen durch ein Semikolon getrennt werden. Der Wert des Parameternamens wird durch ein Ist-Gleich-Zeichen angegeben (siehe Beispiele unten).

 

 

Beispiele für Namespace-Deklarationen

Ein Beispiel für eine Namespace Deklaration in XSLT, die die Systemklasse System.Environment: identifiziert.

 

xmlns:myns="clitype:System.Environment"

 

Ein Beispiel für eine Namespace Deklaration in XSLT, die die zu ladende Klasse als Trade.Forward.Scrip: identifiziert.

 

xmlns:myns="clitype:Trade.Forward.Scrip?asm=forward;version=10.6.2.1"

 

Ein Beispiel für eine Namespace-Deklaration in XQuery, die die Systemklasse MyManagedDLL.testClass identifiziert. Es werden zwei Klassen unterschieden:

 

1.Wenn die Assembly aus dem GAC geladen wird:
declare namespace cs="clitype:MyManagedDLL.testClass?asm=MyManagedDLL;

         ver=1.2.3.4;loc=neutral;sn=b9f091b72dccfba8";

 

2.Wenn die Assembly aus der DLL geladen wird (vollständige und partielle Referenzen unten):

         declare namespace cs="clitype:MyManagedDLL.testClass?from=file:///C:/Altova
         Projects/extFunctions/MyManagedDLL.dll;

 

declare namespace cs="clitype:MyManagedDLL.testClass?from=MyManagedDLL.dll;

 

 

XSLT-Beispiel

Hier sehen Sie ein vollständiges XSLT-Beispiel, in dem Funktionen in der Systemklasse System.Math: aufgerufen werden:

 

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

   <xsl:output method="xml" omit-xml-declaration="yes" />

   <xsl:template match="/">

      <math xmlns:math="clitype:System.Math">

         <sqrt><xsl:value-of select="math:Sqrt(9)"/></sqrt>

         <pi><xsl:value-of select="math:PI()"/></pi>

         <e><xsl:value-of select="math:E()"/></e>

         <pow><xsl:value-of select="math:Pow(math:PI(), math:E())"/></pow>

      </math>

   </xsl:template>

</xsl:stylesheet>

 

Die Namespace-Deklaration für das Element math verknüpft das Präfix math: mit der URI clitype:System.Math. Der Beginn der URI clitype: gibt an, dass danach entweder eine Systemklasse oder eine geladene Klasse definiert wird. Das Präfix math: im XPath-Ausdruck verknüpft die Erweiterungsfunktionen mit der URI (und durch Erweiterung der Klasse) System.Math. Die Erweiterungsfunktionen identifizieren Methoden in der Klasse System.Math und stellen Argumente bereit, wo dies erforderlich ist.

 

 

XQuery-Beispiel

Hier sehen Sie ein XQuery-Beispielfragment ähnlich dem XSLT-Beispiel oben:

 

 <math xmlns:math="clitype:System.Math">

    {math:Sqrt(9)}

 </math>

 

Wie beim XSLT-Beispiel weiter oben identifiziert die Namespace-Deklaration die .NET-Klasse, in diesem Fall eine Systemklasse. Der XQuery-Ausdruck identifiziert die aufzurufenden Methode und liefert das Argument.

 


© 2019 Altova GmbH