Laden...

einbinden des XSLT-Prozessors von Saxon in C#

Erstellt von BenFire vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.253 Views
B
BenFire Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren
einbinden des XSLT-Prozessors von Saxon in C#

Also Leute...nachdem ich nun hier schon den ganzen Tag rumprobiere und auch schon etliche stunden mit suchen verbracht hab wollt ich euch mal fragen, wie geht.
Und zwar will ich den XSLT-Prozessor von saxon einfügen. Die install-gac.cmd hab ich ausgeführt und da scheint auch soweit alles geklappt zu haben....
die Saxon-Files stehen dann im Verzeichnis c:\WINNT\assembly\
Soooo und dann kommt mein erstes Problem.
Und zwar steht auf der Saxon-Seite bezüglich der Installation:
"It is also useful to add the /bin subdirectory to the PATH environment variable. This enables you to use the commands Transform, Query, and Validate without identifying their location explicitly.

Unless you want to use different versions of Saxon in different applications, it is simplest to make these permament settings. Go to Control Panel / System / Advanced / Environment Variables. If Saxon is used by multiple users, add a system environment variable SAXON_HOME; if there is a single user, make it a user environment variable. At the same time, edit the value of the existing PATH variable. You may need to restart applications for the settings to take effect.
"

  1. Was soll das oben angegebene bringen? / Was macht es?
  2. Ist das richtig, wenn ich bei "Umgebungsvariablen"-->Benutzervariablen als Name z.b. Saxon und als Wert den Pfad zu den Dateien angeben also in meinem Fall c:\saxon\bin ???

Und nun die eigentliche Frage.....wie sprech ich das ganze im VisualStudio unter C# an???

ich hab schon alles probiert:
using net.sf.saxon
using Saxon
using saxon
using System.Net.sf.saxon

geht alles nicht!

Muss ich noch irgendwas einfügen/einbinden,...hab ich was falsch gemacht, oder woran liegt das, dass ich hier nix zum laufen bekomme.
Also ich mein sobald das IntelliSense anspricht müsstes ja gehen.
aber das tut es nicht X( (dass das IntelliSense anspricht)
Wär euch echt dankbar, wenn ihr mir diesbezüglich helfen könntet.
Einer muss das ja schonmal gemacht haben......hoff ich
Danke

Ben

B
BenFire Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren

hat da etwa keiner eine Ahnung von?

S
8.746 Beiträge seit 2005
vor 17 Jahren

Hast du eine Assembly-Referenz gemacht?

Frage: Warum nutzt du eigentlich nicht die eingebauten XSLT-Klassen von .NET?

B
BenFire Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren

die hab ich ja probiert zu nutzen...funktioniert auch wunderbar.
nur mein redirect:write, welches ich in der xslt datei angebe wird übers c# nicht ausgeführt.
nun weiss ich aber nicht woran das liegt, also wollt ich erst einmal einen aktuellen xslt Prozessor drauf laden, um die fehlerquelle auszuschließen...was sich als wesentlich umständlicher erweisst, als ich vorerst dachte 🙁

EDIT:
Aber danke erstmal für den Tip mit der Referenz....ma schaun, wie weit ich damit komme 8)

B
BenFire Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren

soooo und da ist auch schon wieder das nächste Problem.
Ich hab wie gesagt die dateien über das install-gac tool eingefügt.
Also das Tool schreibt die DLL´s in den Ordner "C:\assembly\
dort sind die Dateien auch vorhanden. wenn ich sie nun aber einbinden will (als Referenz)
dann macht er da nix.
Also hab ich die DLL´s mal direkt ausgewählt....dann hab ich immerhin im C# mit dem Intellisense die erkennung der Klassen in den DLL´s aber wenn ich mein Programm starte meint er folgendes:
"Saxon.Api.XPathSelector" sind keine Konstruktoren definiert."

was ist denn da los?
und warum lassen sich die dinger aus dem assembly-ordner einbinden?

Danke für Eure Antworten.

Ben

B
BenFire Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren

soooo...also am Prozessor scheint es schonmal nicht zu liegen.
Das würde ja aber bedeuten, dass das "redirect:write" aus der XSLT - Datei im C# konverter komplett irgnoriert wird. X(

S
8.746 Beiträge seit 2005
vor 17 Jahren

Original von BenFire
nur mein redirect:write, welches ich in der xslt datei angebe wird übers c# nicht ausgeführt.

Ist auch kein Wunder, denn das ist kein Standard-XSLT, sondern eine SAXON-proprietäre Erweiterung. Unter XSLT 2.0 (welches .NET 2.0 macht) geht es aber jetzt auch so:

"Ursprünglich sah das Verarbeitungsmodell so aus, dass XSLT genau ein Eingabedokument in genau ein Ausgabedokument transformiert. Die automatische Erzeugung von ganzen Websites aus einer XML-Instanz verlangte jedoch nach der Erzeugung vieler Dateien. Hier gab es bislang zwei Optionen: Entweder steuert man den XSLT-Prozessor von außen mit einem Parameter und lässt für jede auszugebende Seite eine eigene Transformation laufen - oder man verwendet eine proprietäre Erweiterung. Zwei bekannte XSLT-Engines, Xalan und Saxon, erlauben Letzteres in der Form

<!-- Saxon: -->
<saxon:output href="dateiname">...</saxon:output>
<!-- Xalan: -->
<redirect:write select="dateiname">...</redirect:write>

In XSLT 2 sieht die Ausgabe von Dokumenten nun so aus:

<!-- XSLT 2: -->
<xslt:result-document href="dateiname">...</xslt: result-document>

In allen gezeigten Fällen geben die Prozessoren den Inhalt der jeweiligen Elemente in die mit href beziehungsweise select bezeichnete Datei aus. Notwendig ist diese Vorgehensweise nicht. Es gibt nach wie vor einen primären Ausgabestrom wie in XSLT 1."

Ansonsten:

dort sind die Dateien auch vorhanden. wenn ich sie nun aber einbinden will (als Referenz)
dann macht er da nix.

Was heisst "nix"? Erscheint Saxon in den References? Fehlermeldung?

B
BenFire Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren

Was heisst "nix"? Erscheint Saxon in den References? Fehlermeldung? Naja das Problem hat sich gelöst. Ich muss natürlich die DLL´s einbinden und nicht die Files in den assembly-ordner.

Ist auch kein Wunder, denn das ist kein Standard-XSLT, sondern eine SAXON-proprietäre Erweiterung.

sowas hatte ich mir ja auch gedacht, deswegen hab ich ja versucht die .net files von Saxon mit aufzuspielen. Das geht auch...er wandelt das xml auch um. nur das redirect:write wird immer noch nicht ausgeführt X(

S
8.746 Beiträge seit 2005
vor 17 Jahren

Nochmal (hast mein Posting offenbar nicht ganz zuende gelesen), vergiss SAXON, nimm die .NET-Klassen und mache das:

In XSLT 2 sieht die Ausgabe von Dokumenten nun so aus:

<!-- XSLT 2: -->
<xslt:result-document href="dateiname">...</xslt: result-document>

476 Beiträge seit 2004
vor 17 Jahren

hallo BenFire,

Original von svenson
Nochmal (hast mein Posting offenbar nicht ganz zuende gelesen), vergiss SAXON, nimm die .NET-Klassen und mache das:

svenson hat recht!

Ich habe sowohl Saxon als auch die Klassen aus dem .NET Framework im Einsatz, und ich kann Dir ebenfalls nur raten alles zu benutzen was das Framework von Haus aus hergibt, und nur dann 3rd Party Tools einzusetzen wenn die Funktionalität nicht ausreicht, was sie aber im konkreten Fall nicht tut.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de