(aktualisiert!)

IT-Trainings in Zeiten des Corona-Virus, Veranstaltungstipps der www.gfu.net:
Schulung XML Einfuehrung und Grundlagen *** Schulung Python fuer Programmiereinsteiger *** Schulung XML, XSLT, XPath, XSL-FO Einfuehrung *** Schulung Java/JSP/HTML/JDBC/XML Komplett *** Schulung XML mit Altova XMLSpy *** Schulung XML Grundlagen, XSL-FO, SVG, DocBook, DITA *** Schulung XML - der professionelle Ueberblick *** Schulung XML-Schema Intensiv *** Schulung Einstieg in die Programmierung *** Schulung C++ fuer Programmiereinsteiger *** Schulung VB.NET fuer Visual Basic-Programmierer ***


XSL-Übersicht / XSL-Transformationsaufrufe

XSL-Transformationsaufrufe

XSL-Transformationsaufrufe

➪ Die XSL-Transformation kann direkt in ANT, XProc, Java, C#.NET oder anderen Programmiersprachen aufgerufen werden.

Auf dieser Seite:

XSL-Transformationen mit ANT

siehe auch

Neben zahlreichen anderen Möglichkeiten (, als Beispiele) beherrscht ANT auch die XSL-Transformation. Hier ist es möglich, sich ein Target individuell zu konfigurieren, das beliebig oft parametergesteuert aufgerufen werden kann.


<target name="runxsltransformation">
   <delete file="${poutput}" />
   <echo message="deleted: ${poutput}"/>
   <xslt style="${pstyle}" 
         in="${pinput}" 
         out="${poutput}" 
         classpath="${ppath}/${pprocessor}.jar" />
   <echo message="generated: ${poutput}"/>
</target>

Damit das funktionieren kann, benötigen Sie noch eine ANT-Property, in der der Pfad zu den jar-Dateien (XSL-Prozessor) definiert ist, denn diese Information wird im classpath-Attribut als Information benötigt. Alternativ können Sie den Pfad auch direkt in den Classpath hineinschreiben oder bei dem noch folgenden eigentlichen XSL-Transformationsaufruf als zusätzlichen Parameter übergeben.


<property name="ppath" 
         value="(PFAD-ZU-DEN-PROZESSOR-JAR-DATEIEN)"/>

Der tatsächliche Aufruf der jederzeit wiederholbaren Transformation funktioniert über antcall; hier können die Parameter (Input-Datei, Output-Datei, Stylesheet) entsprechend übergeben werden. Durch zahlreiche antcall-Aufrufe können entsprechend viele Einzelkonvertierungen nacheinander durchgeführt werden.


<antcall target="runxsltransformation">
   <param 
      name="poutput" 
      value="C:/wg/output.html" />
   <param 
      name="pinput" 
      value="C:/wg/input.xml" />
   <param 
      name="pstyle" 
      value="C:/wg/xslfile.xsl" />
   <param 
      name="pprocessor" 
      value="saxon9ee" />
</antcall>

Ein Aufruf sieht beispielsweise so aus:


runxsltransformation:
 [delete] Deleting: C:/wg/output.html
   [echo] deleted: C:/wg/output.html
   [xslt] Processing C:/wg/input.xml 
          to C:/wg/output.html
   [xslt] Loading stylesheet C:/wg/xslfile.xsl
   [echo] generated: output.html

ANT: Arbeiten mit mit Oxygen und Saxon-EE

Wenn Sie mit Oxygen und Saxon-EE arbeiten möchten, empfiehlt sich ein anderes Vorgehen:


<project name="MYANTPROJECT" default="tuwas">
    <property name="oxyFolder" value="Path-to-Oxygen"/>
    <property name="myclasspath"
        value="${oxyFolder}/lib/oxygen.jar;
               ${oxyFolder}/lib/saxon9ee.jar;
               ${oxyFolder}/lib/log4j.jar;
               ${oxyFolder}/lib/xercesImpl.jar;
               ${oxyFolder}/lib/resolver.jar"/>
    <target name="tuwas">
        <java 
        classname="net.sf.saxon.Transform" 
        classpath="${myclasspath}" 
        clonevm="true">
            <arg value="-s:myinput.xml"/>
            <arg value="-xsl:mystylesheet.xsl"/>
            <arg value="-o:myoutput.xml"/>
        </java>
    </target>
</project>

XSL-Transformationen mit XProc

Die XSL-Transformation mit XProc finden Sie im Kapitel über .

XSL-Transformationen mit C#.NET

In C#.NET (analog in VisualBasic.NET) steht die Klasse System.Xml.Xsl.XslCompiledTransform bereit, von der nur ein Objekt angelegt werden muss, das die Methoden Load (XSL-Stylesheet) und Transform (Inputdatei, Outputdatei) aufruft.


System.Xml.Xsl.XslCompiledTransform t;
t = new System.Xml.Xsl.XslCompiledTransform();
string input = "input.xml";
string output = "output.html";
string xsldatei = "xsldatei.xsl";
t.Load(xsldatei);
t.Transform(input, output);

Alternativ können Sie die XSL-Transformation auch mithilfe von XmlDocument, XslCompiledTransform, XmlReader, XmlReaderSettings, XsltSettings, XPathNavigator und TextWriter durchführen:


Action<string, string, string> XSL_Transform = 
    (input, stylesheet, output) => {
    XmlDocument tmpdoc = new XmlDocument();
    tmpdoc.Load(input);            
    System.Xml.Xsl.XslCompiledTransform t;
    t = new System.Xml.Xsl.XslCompiledTransform(false);
    t.Load(XmlReader.Create(stylesheet,
        new XmlReaderSettings()
        {
            DtdProcessing = DtdProcessing.Parse
        }),
        new System.Xml.Xsl.XsltSettings(true, false),
        null
    );
    System.Xml.XPath.XPathNavigator nav = tmpdoc.CreateNavigator();
    using (TextWriter myWriter = File.CreateText(output))
    {
        t.Transform(nav, null, myWriter);
    }
};
XSL_Transform(@"input.xml",
    @"stylesheet.xsl",
    @"output.xml");

XSL-Transformationen mit Java

Zum automatisierten Aufruf einer XSL-Transformation in Java genügt die Verwendung der speziellen Java-Klassen TransformerFactory und Transformer (alle in javax.xml.transform) sowie StreamSource und StreamResult (beide in javax.xml.transform.stream). Die Klasse File liegt in java.io.


 /**starts an XSLT Transform 
  * @param xsltFileName: Path and Name of XSL-Stylesheet
  * @param xmlsourceFileName: Path and Name of XML Sourcefile 
  * @param xmldestFileName: Path and Name of destination file*/
 public static void XSLtransform(
      String xsltFileName, 
      String xmlsourceFileName, 
      String xmldestFileName) {  
  TransformerFactory tfactory;
  Transformer transformer;
  try {
   tfactory = TransformerFactory.newInstance();
   transformer = tfactory.newTransformer(
      new StreamSource(new File(xsltFileName)));
   transformer.transform(
      new StreamSource(new File(xmlsourceFileName)),
      new StreamResult(new File(xmldestFileName)));
   System.out.println("DONE: transformer.transform ...");   
  } catch (TransformerConfigurationException e) {
      e.printStackTrace();   
  } catch (TransformerException e) {
      e.printStackTrace();
  }
 }

Aufrufbar wird das Programm durch das übliche public static void main mit den Parametern


 public static void main(String[] args) {
   XSLtransform(
       "C:/wg/XSL_Beispiele.xslt", 
       "C:/wg/XML_Input.xml", 
       "C:/wg/ergebnis.xml");
 }

wg / 17. November 2019



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XSL_Transformationsaufrufe_ANT_XProc_Java_Csharp.html