Comment exécuter la transformation saxon xslt en java


Je peux facilement exécuter ce qui suit en ligne de commande pour transformer un fichier xml:

java -jar saxon9he.jar -o:outputfile.xml data.xml transform.xslt

Je voudrais faire exactement les mêmes résultats à partir d'un fichier java afin de pouvoir l'utiliser dans une partie d'un programme que je crée. J'ai mis le saxon9he.jar dans le chemin de construction mais comment puis-je appeler cette même commande en dehors de la ligne de commande?

Author: Robert Petty, 2016-10-21

4 answers

La documentation est ici: http://www.saxonica.com/documentation/index.html#! utilisation de-xsl / embedding

Saxon propose deux API pour exécuter des transformations XSLT à partir d'une application Java: l'API JAXP et l'API s9api. JAXP est une interface standard offerte par presque tous les processeurs Java XSLT, donc vous voulez utiliser celui-ci si vous voulez que votre application soit portable; son inconvénient est que (a) il est très orienté vers XSLT 1.0 et qu'il est difficile de tirer parti des nouveaux capacités dans XSLT 2.0 et XSLT 3.0, et (b) il ne s'intègre pas particulièrement bien avec les API pour les tâches connexes telles que le traitement de schéma et l'évaluation XPath.

L'API s9api est beaucoup plus adaptée aux capacités de Saxon dans une variété de tâches, y compris la validation XSLT, XQuery, XPath et XSD, mais elle n'est pas portable.

C'est votre choix.

 4
Author: Michael Kay, 2016-10-22 13:26:00

Il est préférable de travailler avec les API Java standard pour le traitement XML et XSLT: java.XML.transformer

La première classe à laquelle vous devez accéder est javax.XML.transformer.TransformerFactory, que vous utilisez pour créer un objet Transformer, que vous utilisez ensuite pour exécuter votre transformation XSLT. Vous pouvez également utiliser TransformerFactory pour créer un objet Templates (ce qui obligera Saxon à pré-traiter/compiler / etc votre feuille de style XSLT), puis à utiliser l'objet Templates à plusieurs reprises pour créer Objets Transformer pour vos transformations XSLT.

Afin de s'assurer que le javax.XML.transformer.La classe TransformerFactory correspond à l'implémentation Saxon, vous pouvez soit jouer avec le chemin de classe de démarrage à l'aide des options de ligne de commande, soit utiliser du code pour faire la même chose:

Système.setProperty ("javax.XML.transformer.TransformerFactory", " net.sf.Saxon.TransformerFactoryImpl");

Une fois cela fait, tous les appels à TransformerFactory.newInstance () créera comme par magie Saxon Implémentations TransformerFactory. Vous feriez mieux d'utiliser cette méthode car vous bénéficierez des avantages des API Java standard et vous aurez la liberté de passer ultérieurement à d'autres processeurs XSLT. Vous voudrez peut-être envisager d'utiliser XSLTC, qui fait partie d'Apache Xalan, car il est plus rapide pour certains types de feuilles de style XSLT.

 2
Author: Morten Jorgensen, 2016-10-21 18:53:31
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("java -jar saxon9he.jar -o:outputfile.xml data.xml transform.xslt");

Référez-vous à javadoc ici .

 0
Author: Sundararaj Govindasamy, 2016-10-21 16:26:56

En utilisant ce que @ Martin Honnen a dit que j'ai obtenu:

import net.sf.saxon.Transform;

class XSLTransform{
    public static void main(String args[]) throws Exception {

        String[] arglist = {"-o:outputfile.xml","data.xml", "transform.xslt"};

        Transform.main(arglist);

    }
}

Semble fonctionner très bien. Merci pour l'aide

 0
Author: Robert Petty, 2016-10-21 18:27:37