XSLT Prozessor Saxon (zum üben)

#1
Hallo!

Falls ihr euch mal mit XML und XSLT befassen wolltet, jedoch nie mehr als den Internet Explorer dazu bemüht hat die XML gegen das XSLT Template zu rendern findet hier abhilfe:

http://saxon.sourceforge.net
Saxon ist ein Open Source XSLT Prozessor der es ermöglicht auf der Kommandozeile oder innerhalb eines Java Programms XLM Dokumente nach einem XSLT Template gerendert zu generieren.

Saxon setzt eine installierte Java 1.4 Laufzeitumgebung voraus.

Saxon verwenden ist ganz einfach.

Zuerst laden wir uns mal das Projekt von SourceForge herunter:
http://sourceforge.net/projects/saxon

--> Download (Saxon 8.0):
http://prdownloads.sourceforge.net/saxon/saxonb8-0.zip?download

Danach entpacken wir das Zip Archiv in irgend ein Verzeichniss
Z.bsp.: c:\Saxon

In diesem verzeichnis finden wir dann die Datei saxon8.jar welche wir für unsere Anwendungen brauchen.

Wir erstellen nun mal ein Minimales Beispiel XML und eine XSLT Datei um das Ganze mal auszuprobieren. Dabei lassen wir uns aus der XML Datei über die Anweisungen in der XSLT Datei eine HTML Datei erzeugen.

Wir legen ein Verzeichniss namens XMLTest unter c:\ an
-> c:\XMLTest

Nun erstellen wir die Datei Test.xml

Test.xml
Code:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="Prozessor.xsl"?>
<firma name="XYZ Company">
	<angestellte>
		<angestellter name="Thomas" alter="20"/>
		<angestellter name="Richard" alter="22"/>
	</angestellte>
</firma>
Darauf folgend kümmern wir uns um die Prozessor.xsl
Code:
<?xml version="1.0"?>
<!--Prozessor.xsl-->
<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <html>
         <head>
            <title>
               <xsl:value-of select="firma/@name"/>
            </title>
        </head>
        <body>
               <xsl:value-of select="firma/@name"/>
	       <table border="2">
	          <xsl:for-each select="/firma/angestellte/angestellter">
                  <tr>
                    <td><xsl:value-of select="@name"/></td>
                    <td><xsl:value-of select="@alter"/></td>
                  </tr>
	          </xsl:for-each>
	       </table>
        </body>
      </html>
   </xsl:template>
</xsl:stylesheet>
Nun öffnen wir eine Konsole und wechseln in das Verzeichnis c:\xmlTest

Dort setzen wir nun das Kommando:
Code:
C:\xmlTest>java -cp c:\saxon\saxon8.jar net.sf.saxon.Transform -o Test.html Test
.xml Prozessor.xsl
Ab und finden nach Beendigung dieses Kommandos die Datei C:\xmlTest\Test.html

Mit dem folgendem Inhalt:

Code:
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   
      <title>XYZ Company</title>
   </head>
   <body>XYZ Company
      <table border="2">
         <tr>
            <td>Thomas</td>
            <td>20</td>
         </tr>
         <tr>
            <td>Richard</td>
            <td>22</td>
         </tr>
      </table>
   </body>
</html>
Hoffe ihr könnt das Anwendungsbeispiel leicht nachvollziehen.

GrußTom
 
W
#2
Re: XSLT Prozessor Saxon -> über Ordner?

Hallo Tom,

vielen Dank für die Anleitung, Sie ist super simpel!

Weisst Du auch noch eine einfache Lösung für das gleiche Spiel über ein ganzes Directroy?

Viele Grüße,
wilma
 

puntila

Grünschnabel
#4
Hallo Thomas,

super Anleitung. Habe das Ganze unter einer Windows-Mühle gemacht. Funktionierte anfänglich nicht, weil ich Java nicht installiert hatte und Java und Saxon nicht in der Umgebungsvariablen PATH gesetzt hatte. Also zunächst folgende Schritte:

1/ Java installieren: jre-6u21-windows-i586-iftw-rv.exe
2/ PATH erweitern um "C:\Programme\Java\jre6\bin"

Dann Deine beiden obigen Dateien test.xml und test.xsl erstellen und dann:

C:\Programme\Saxon\test>java -cp c:\Programme\Saxon\saxon9he.jar net.sf.saxon.Transform -o test.html test.xml test.xsl

Antwort:

Warning: at xsl:stylesheet on line 4 column 51 of test.xsl:
Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor

Liefert die gewünschte HTML-Datei test.html.


Danke
 

Klösp

Grünschnabel
#5
Hallo

Ich versuche mich auch gerade in XSLT einzuarbeiten.

Ich habe noch folgendes Problem:

Das ist mein Befehl:

C:\Users\xy\Desktop\XSLTTEST> java -cp C:\Users\xy\Desktop\XSLTTEST\Saxon\saxon9he.jar net.sf.saxon.Transform -o test.html Test.xml Prozessor.xsl

Ich bekomme aber immer nur:

Command line option -o requires a value

Woran liegt das?

Danke im Vorraus
 

Klösp

Grünschnabel
#6
mit Doppelpunkt hat es funktioniert.

C:\Users\xy\Desktop\XSLTTEST> java -cp C:\Users\xy\Desktop\XSLTTEST\Saxon\saxon9he.jar net.sf.saxon.Transform -o:test.html Test.xml Prozessor.xsl
 
#7
Hallo :)

ich habe auch alles genau so gemacht wie beschrieben.
Leider kommt bei mir immer die Fehlermeldung
"Der Befehl C:\Users\xy\Desktop\Aufgab ist entweder falsch geschrieben, oder konnte nicht gefunden werden"

ich verstehe nicht was ich falsch gemacht habe
 

User2

Grünschnabel
#8
Hallo Thomas & Mitstreiter,

ich häng mich mal mit einer Frage an diesen Thread mit dran, obwohl er scho etwas älter ist:

In der Einleitung steht:

"Saxon ist ein Open Source XSLT Prozessor der es ermöglicht auf der Kommandozeile oder innerhalb eines Java Programms XLM Dokumente nach einem XSLT Template gerendert zu generieren." (Hervorhebung von mir)

Die erste Möglichkeit über Kommandozeile habe ich probiert und es funktioniert anstandslos, vielen Dank für den wertvollen Hinweis!

Jetzt würde mich aber noch die zweite Möglichkeit nach dem 'oder' interessieren.

Ich habe dazu die saxon9he.jar als Bibliothek einem Java-Projekt hinzugefügt sowie die Test.xml und Prozessor.xsl Datei in den Projektordner kopiert. Jetzt wollte ich mit Hilfe der saxon api und anderer Quellen ein kleines Java Programm schreiben, welches genau das gleiche leistet, wie der genannte Kommandozeilen-Befehl (java -cp c:\saxon\saxon8.jar net.sf.saxon.Transform
-o Test.html Test.xml Prozessor.xsl). Leider ist es mir, zumindest mit saxon, nicht gelungen, etwas lauffähiges hinzubekommen. Weiß jemand Abhilfe?