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 :

Parser un fichier XML et écrire dedans en même temps


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut Parser un fichier XML et écrire dedans en même temps
    Bonjour

    Avec SAX, ou avec StAX, est-il possible de parser un fichier XML et, en même temps d'écrire dedans ? Par exemple, je recherche telle valeur dans telle balise et si je la trouve, je veux la remplacer par une autre valeur et que la modification soit écrite et "persistée" dans le fichier XML parsé.

  2. #2
    Membre émérite Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    Citation Envoyé par El Saigneur
    Avec SAX, ou avec StAX, est-il possible de parser un fichier XML et, en même temps d'écrire dedans ?
    perso je sais pas .... et si personne te répond je te conseille d allez voir la java doc de SAX ou STAX .... tu trouvera facilement les infos

    Sinon avec jDom tu peux c'est sur

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut
    Les fichiers que j'ai à traiter font plus de 1 Go. Je dois donc utiliser SAX ou StAX. J'ai cherché. SAX ne permet pas d'écrire. StAX permet de construire un fichier XML mais je n'ai pas trouvé comment changer les valeurs du fichier que je suis en train de parser.

    Pour l'instant je parse donc un fichier avec StAX et construit en parallèle un autre fichier qui lui est identique sauf pour les valeurs que j'ai repérées et que je veux changer.

    Je laisse ce post ouvert, si quelqu'un a une idée pour modifier directement le fichier que je suis en train de parser avec StAX au lieu d'en construire un nouveau.

  4. #4
    Invité de passage
    Inscrit en
    Février 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 1
    Par défaut Comment marche StAX
    Citation Envoyé par El Saigneur Voir le message
    Les fichiers que j'ai à traiter font plus de 1 Go. Je dois donc utiliser SAX ou StAX. J'ai cherché. SAX ne permet pas d'écrire. StAX permet de construire un fichier XML mais je n'ai pas trouvé comment changer les valeurs du fichier que je suis en train de parser.

    Pour l'instant je parse donc un fichier avec StAX et construit en parallèle un autre fichier qui lui est identique sauf pour les valeurs que j'ai repérées et que je veux changer.

    Je laisse ce post ouvert, si quelqu'un a une idée pour modifier directement le fichier que je suis en train de parser avec StAX au lieu d'en construire un nouveau.
    Personnelement je connais pas grand chose sur Stax mais j'espere que ce lien va t'aider un peu à comprendre StAX. http://hikage.developpez.com/java/articles/xml/stax/

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Remplacer dans le même fichier sera impossible, car, à part en écrasant (et donc en restant strictement au même emplacement pour toutes les données), on ne peux pas écrire au milieu d'un fichier existant.

    Mis à part çà, si un deuxième fichier est convenable, tu peux faire ceci à la volée avec xerces. C'est typiquement un boulot de transformation d'évènement SAX en d'autres évènement sax (modification) qui sont au final envoyé vers une API d'écriture sur disque. D'habitude j'utilise un XSLT pour faire la transformation xml -> xml, mais ce doit être possible aussi avec juste du code.


    Typiquement, il te faudrait arriver à çà


    Lecture -> évenement SAX -> nouvel Evenement éventuellement modifié par ton critère -> API d'écriture sur disque.

    L'avantage de SAX c'est jutement que tu peux chainer les consommateur / producteur l'un derrière l'autre pour que tout se fasse à la volée . L'inconvénient, c'est une plaie à coder :p

  6. #6
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 169
    Par défaut
    bonjour

    voila un exemple de comment parser (charger) un fichier xml avec StAX
    il existe deux API de StAX pour lire et ecrire dans un fichier xml

    - API Curseur (cursor) : XMLStreamReader
    - API Iterateur (iterator) : XMLEventReader

    fichier xml :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <tns:bibliotheque 
    xmlns:tns="http://www.jmdoudoux.com/test/stax" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <?MonTraitement?>
    <tns:livre>
    <!-- mon commentaire -->
    <tns:titre>titre 1</tns:titre>
    <tns:auteur>
    <tns:nom>nom 1</tns:nom>
    <tns:prenom>prenom  1</tns:prenom>
    </tns:auteur>
    <tns:editeur>editeur  1</tns:editeur>
    </tns:livre>
    </tns:bibliotheque>

    la classe java qui permet de charger un fichier xml (API Curseur)

    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
    package API_Type_Curseur;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import javax.xml.stream.events.XMLEvent;
    import javax.xml.stream.*;
     
    public class StAX {
     
     // la methode main
    public static void main(String[] args) throws Exception {
     
    		try{
    		XMLInputFactory xmlif = XMLInputFactory.newInstance();
    		XMLStreamReader xmlr = xmlif.createXMLStreamReader(new FileReader("ressources/exemple.xml"));
     
     
     
    		while (xmlr.hasNext()) {
    			int eventType = xmlr.next();
    			switch (eventType) {
    			case XMLEvent.START_ELEMENT:
    			System.out.println("START_ELEMENT "+xmlr.getName());
    			break;
     
    			case XMLEvent.END_ELEMENT:
    			System.out.println("END_ELEMENT "+xmlr.getName());
    			break;
     
    			default:
     
    			break;
    			}
    			}}
    		catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (XMLStreamException e) {
    			e.printStackTrace();
    		}
    		  }  
    	         }

    la classe java qui permet de charger un fichier xml (API Iterateur)

    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
    package API_Type_Iterateur;
     
     
    import java.io.*;
    import javax.xml.stream.*;
    import javax.xml.stream.events.*;
     
    public class StAX {
     
    // la methode main
      public static void main(String args[]) throws Exception {
     
       XMLInputFactory xmlif = XMLInputFactory.newInstance();
       XMLEventReader xmler = xmlif.createXMLEventReader(new FileReader(        "ressources/exemple.xml"));
        XMLEvent event;
     
        while (xmler.hasNext()) {
          event = xmler.nextEvent();
          if (event.isStartElement()) {
            System.out.println(event.asStartElement().getName());
          } else if (event.isCharacters()) {
            if (!event.asCharacters().isWhiteSpace()) {
              System.out.println("\t ->" + event.asCharacters().getData());
            }
          }
        }
      }
    }

    j'espère que ca va t'aidera un peu

    merci

Discussions similaires

  1. [Débutant] Créer un fichier XML et écrire dedans
    Par aspkiddy dans le forum C#
    Réponses: 3
    Dernier message: 02/04/2014, 17h16
  2. [xslt] Parser 2 fichiers XML
    Par malekms dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/12/2005, 12h22
  3. Parser un fichier XML
    Par Charlinecha dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 11/07/2005, 17h18
  4. [SAX] parser un fichier xml en Java
    Par royou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/02/2005, 17h12
  5. parser des fichier .xml en perl
    Par djibril dans le forum Modules
    Réponses: 13
    Dernier message: 18/05/2004, 17h08

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