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 :

Modification d'un noeud xml [JAXB]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2012
    Messages : 24
    Par défaut Modification d'un noeud xml
    Bonjour !

    C'est OK pour la création d'un doc xml à partir d'objet, et pour la transformation d'un xml en objet, je m'attaque maintenant à la modification de mon XML.

    Est ce que le principe suivant est bon ?

    1- J'obtiens mes listes d'objet depuis mon doc XML
    2- Je sélectionne l'objet (qui correspond à mon noeud) à modifier
    3- Je réécris mon XML à partir de mes listes d'objets (qui contient l'objet que j'ai modifié)

    Si ce principe est bon, n'est ce pas gourmand en ressource de réécrire tout le fichier XML à chaque petite modification d'un noeud ?

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par electrovolt Voir le message
    Si ce principe est bon, n'est ce pas gourmand en ressource de réécrire tout le fichier XML à chaque petite modification d'un noeud ?
    Si, mais, XML étant un format texte, c'est inévitable.

    Si tu as souvent besoin de modifier de petites choses, tu devrais te demander si une base de données ne serait pas plus adaptée que des fichiers XML. Au pire, une base de données XML.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2012
    Messages : 24
    Par défaut
    J'ai un petit soucis pour le point 2 : récupérer l'objet d'un noeud en particulier !

    Voici un peu de code simplifié (pour ceux qui auront un besoin similaire ) :

    Mon 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
    16
    17
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <bibliothequeXml xmlns="http://www.monappli.com/jaxb">
    <filmXml>
      <emplacementFichier></emplacementFichier>
      <nomFichier>fichier1.avi</nomFichier>
      <identifiant>1</identifiant>
      <nom>Nom du premier Film</nom>
      <annee>2000</annee>
    </filmXml>
    <filmXml>
      <emplacementFichier></emplacementFichier>
      <nomFichier>fichier2.avi</nomFichier>
      <identifiant>2</identifiant>
      <nom>Nom du deuxième film</nom>
      <annee>2010</annee>
    </filmXml>
    </bibliothequeXml>
    Le java :
    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
     
    //1- J'obtiens mes listes d'objet depuis mon doc XML
    JAXBContext jc = JAXBContext.newInstance(BibliothequeXml.class);
    Unmarshaller um = jc.createUnmarshaller();
    BibliothequeXml biblio = (BibliothequeXml) um.unmarshal(this.fichier);
     
    //2- Je sélectionne l'objet (qui correspond à mon noeud) à modifier
    FilmXml filmXml = ??
     
    //2b- Je fais les modifs sur mon objet :
    filmXml.setAnnee(2012);
    filmXml.setNom("Un bon film");
     
    //3- Je réécris mon XML à partir de mes listes d'objets (qui contient l'objet que j'ai modifié)
    Marshaller m = jc.createMarshaller();
    File fichier = new File("chemin/monfichier.xml");
    m.marshal(biblio,fichier);
    Pour le point 2 : Comment obtenir l'objet voulu ?? Je parcours tous mes objet obtenu avec biblio.getFilmXml() et je compare les attributs jusqu'a temps que j'ai le bon objet ?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par electrovolt Voir le message
    Pour le point 2 : Comment obtenir l'objet voulu ?? Je parcours tous mes objet obtenu avec biblio.getFilmXml() et je compare les attributs jusqu'a temps que j'ai le bon objet ?
    Eh bien, vu que tu as transformé le XML en l'un de tes objets, ça dépend surtout de toi, et pas franchement de JAXB.

    Mais ça me semble une méthode parfaitement adaptée, oui.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2012
    Messages : 24
    Par défaut
    Voici la méthode que j'ai suivi (peut être améliorée !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FilmXml objetAModifier = new FilmXml();
    ArrayList<FilmXml> filmsXml = (ArrayList<FilmXml>) biblio.getFilmXml();		
    for(FilmXml filmXmlEnCour : filmsXml) {
      //Ici le test pour m'assurer que c'est bien l'objet que je veux :
      if(objetAModifier.getEmplacementFichier().equals(filmXmlEnCour.getEmplacementFichier()) && objetAModifier.getNomFichier().equals(filmXmlEnCour.getNomFichier())) {
        objetAModifier = filmXmlEnCour;
      }
    }

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

Discussions similaires

  1. modification du contenu de noeud xml
    Par joulive dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 08/09/2009, 16h31
  2. [Ajout noeud xml] comment ça marche?
    Par noobiewan kenobi dans le forum Format d'échange (XML, JSON...)
    Réponses: 37
    Dernier message: 19/07/2007, 22h46
  3. [C#] [1.1] Modification d'attributs d'un noeud XML
    Par Sup@Lou dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/08/2006, 16h35
  4. Réponses: 3
    Dernier message: 01/04/2005, 09h37
  5. XSL ne parvient pas à lire les noeuds XML ??
    Par yahn dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 27/06/2004, 19h29

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