IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Formatage d'un fichier XML par un XSL en Java [XSLT]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Par défaut Formatage d'un fichier XML par un XSL en Java
    Bonjour à tous !

    Je vous expose mon problème. Mon programme Java génère un fichier XML grâce à la librairie Simple. J'ai confectionné un fichier XSL le formattant pour modifier sa structure. Lorsque je le formatte sur Altova XMLSpy, par exemple, il n'y a aucun souci. L'output est 100% correcte. Maintenant, j'ai dû l'intégrer dans mon programme.

    Voici ma méthode qui "foire" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     public void transform(File xmlIn, File xsl, File xmlOut) {
            try {
                SAXParserFactory spf = SAXParserFactory.newInstance();
                spf.setNamespaceAware(true);
                XMLReader reader = spf.newSAXParser().getXMLReader();
                // Création des filtres à appliquer au reader
                SAXTransformerFactory stf = (SAXTransformerFactory) TransformerFactory.newInstance();
                XMLFilter filtre1 = stf.newXMLFilter(new StreamSource(xsl));
                // On "lie" le reader aux filtres
                filtre1.setParent(reader);
                // Création de la source : c'est le dernier filtre de la chaîne
                // C'est lui qui indiquera au transformer quelles transformations à faire "avant"
                // Le résultat est le fichier HTML
                SAXSource source = new SAXSource(filtre1, new InputSource(new FileInputStream(xmlIn)));
                StreamResult resultat = new StreamResult(new FileOutputStream(xmlOut));
                //Transformation en chaîne
                Transformer transformer = stf.newTransformer();
                transformer.transform(source, resultat);
            } catch (FileNotFoundException ex) {
                Logger.getLogger(Sauvegarde.class.getName()).log(Level.SEVERE, null, ex);
            } catch (TransformerException ex) {
                Logger.getLogger(Sauvegarde.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ParserConfigurationException ex) {
                Logger.getLogger(Sauvegarde.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SAXException ex) {
                Logger.getLogger(Sauvegarde.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    Voici la méthode l'appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void transform() {
           save.transform(Constantes.xmlPath, Constantes.xslFirstPath, new File("musicXmlGenerated.xml"));
        }
    Voici la classe Constantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public interface Constantes {
     
        public static final File xmlPath = new File("XMLJavaGenerated");
        public static final File xslFirstPath = new File("FormatXMLtoMusicXML.xsl");
        public static final String troisHuit = "3/8";
        public static final String sixHuit = "6/8";
        public static final String neufHuit = "9/8";
        public static final String quatreQuatre = "4/4";
        public static final String troisQuatre = "3/4";
        public static final String deuxQuatre = "2/4";
        public static final String silenceNote = "r4";
        public static final String noirNote = "c4";
        public static final String noteHead = "x";
        public static final String key = "0 major";
        public static final String clef = "percussion 2";
    }
    Je tiens à préciser que les fichiers XML et XSL se trouvent directement à la racine du projet.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Ça foire, mais encore ?

    Qu'est-ce qui se passe et qui ne te plaît pas ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ça foire, mais encore ?

    Qu'est-ce qui se passe et qui ne te plaît pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    ERREUR :  'Erreur de syntaxe dans 'attributeMesure/substring(key,0,2)'.'
    ERREUR BLOQUANTE :  'Impossible de compiler la feuille de style'
    31 mai 2012 15:52:19 worker.Sauvegarde transform
    GRAVE: null
    javax.xml.transform.TransformerConfigurationException: Impossible de compiler la feuille de style
    	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:828)
    	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newXMLFilter(TransformerFactoryImpl.java:940)
    	at worker.Sauvegarde.transform(Sauvegarde.java:70)
    	at worker.Worker.transform(Worker.java:49)
    	at ihm.controller.Ctrl.transform(Ctrl.java:56)
    	at ihm.view.Ihm.jToggleButton1ActionPerformed(Ihm.java:395)
    	at ihm.view.Ihm.access$200(Ihm.java:32)
    	at ihm.view.Ihm$4.actionPerformed(Ihm.java:181)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    	at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:291)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    	at java.awt.Component.processMouseEvent(Component.java:6288)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    	at java.awt.Component.processEvent(Component.java:6053)
    	at java.awt.Container.processEvent(Container.java:2041)
    	at java.awt.Component.dispatchEventImpl(Component.java:4651)
    	at java.awt.Container.dispatchEventImpl(Container.java:2099)
    	at java.awt.Component.dispatchEvent(Component.java:4481)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    	at java.awt.Container.dispatchEventImpl(Container.java:2085)
    	at java.awt.Window.dispatchEventImpl(Window.java:2478)
    	at java.awt.Component.dispatchEvent(Component.java:4481)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
    	at java.awt.EventQueue.access$000(EventQueue.java:84)
    	at java.awt.EventQueue$1.run(EventQueue.java:602)
    	at java.awt.EventQueue$1.run(EventQueue.java:600)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    	at java.awt.EventQueue$2.run(EventQueue.java:616)
    	at java.awt.EventQueue$2.run(EventQueue.java:614)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    ERREUR :  'Erreur de syntaxe dans 'attributeMesure/substring(key,0,2)'.'
    ERREUR BLOQUANTE :  'Impossible de compiler la feuille de style'
    31 mai 2012 15:52:19 worker.Sauvegarde transform
    GRAVE: null
    javax.xml.transform.TransformerConfigurationException: Impossible de compiler la feuille de style
    	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:828)
    	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newXMLFilter(TransformerFactoryImpl.java:940)
    	at worker.Sauvegarde.transform(Sauvegarde.java:70)
    	at worker.Worker.transform(Worker.java:49)
    	at ihm.controller.Ctrl.transform(Ctrl.java:56)
    	at ihm.view.Ihm.jToggleButton1ActionPerformed(Ihm.java:395)
    	at ihm.view.Ihm.access$200(Ihm.java:32)
    	at ihm.view.Ihm$4.actionPerformed(Ihm.java:181)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    	at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:291)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    	at java.awt.Component.processMouseEvent(Component.java:6288)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    	at java.awt.Component.processEvent(Component.java:6053)
    	at java.awt.Container.processEvent(Container.java:2041)
    	at java.awt.Component.dispatchEventImpl(Component.java:4651)
    	at java.awt.Container.dispatchEventImpl(Container.java:2099)
    	at java.awt.Component.dispatchEvent(Component.java:4481)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    	at java.awt.Container.dispatchEventImpl(Container.java:2085)
    	at java.awt.Window.dispatchEventImpl(Window.java:2478)
    	at java.awt.Component.dispatchEvent(Component.java:4481)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
    	at java.awt.EventQueue.access$000(EventQueue.java:84)
    	at java.awt.EventQueue$1.run(EventQueue.java:602)
    	at java.awt.EventQueue$1.run(EventQueue.java:600)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    	at java.awt.EventQueue$2.run(EventQueue.java:616)
    	at java.awt.EventQueue$2.run(EventQueue.java:614)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Et pourtant, quand je formatte "à la main" mon XML avec le XSL, il n'y a aucun souci !

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Je comprends pas très bien le contexte de la syntaxe qui plante, mais bon, ça a l'air d'être du XLST 2.0, ce que XMLSpy gère sans problème.

    Java de base, par contre, ne gère que XSLT 1.0.

    Il faudrait que tu mettes Saxon Home Edition dans ton Classpath : Java ira le chercher par défaut au lieu de son propre moteur. Et Saxon gère XSLT 2.0.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Par défaut
    Merci beaucoup ! Après l'installation du JAR 9.0.X de Saxon, la convertion s'effectue sans problèmes & la génération du MusicXML est opérationnelle ! UN GRAND MERCI !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture d un fichier xml par xsl
    Par reudodviking dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/10/2007, 23h19
  2. [XSLT] Insertion du nom du fichier XML par transformation XSL
    Par stepd dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/07/2006, 11h40
  3. [DOM] Erreur lors du parsing d'un fichier XML par l'API DOM
    Par patricetoan dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 26/09/2005, 12h43
  4. utilliser un autre fichier xml dans un xsl
    Par New Bee dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/04/2003, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo