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 :

Probleme d'ajout d'un noeud a un fichier XML


Sujet :

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

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut Probleme d'ajout d'un noeud a un fichier XML
    Bonjour tout le monde,

    ça fait un bout de temps que j'ai un fichier xml sur le quel j'amerais ajouter un nouveau element directement sous la racine en utilisant l'outil DOM mais ça ne donne rien malheuresment

    voila mon code :

    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
     
     
    try{ 
              // création d'une fabrique de documents 
              DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance(); 
              // création d'un constructeur de documents 
              DocumentBuilder constructeur = fabrique.newDocumentBuilder(); 
              // lecture du contenu d'un fichier XML avec DOM 
              File xml = new File("C:\\xml\\fihcier.xml"); 
              Document document = constructeur.parse(xml); 
     
               Element racine = document.getDocumentElement();
     
          Element monElement = document.createElement("monelement");
          racine.appendChild(monElement);
    }
    Merci

  2. #2
    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
    Le code m'a l'air correct à première vue. Quelle est l'erreur que tu obtiens?

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Citation Envoyé par Viscapon Voir le message
    Bonjour tt le monde,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
              File xml = new File("C:\\xml\\fihcier.xml");
    Effectivement : c'est quoi qui ne fonctionne pas.
    Ton fichier s'appelle fihcier ou fichier ?
    Ensuite tu re-écris bien le document modifié dans un fichier ?
    Si oui es tu sûr qu'il n'y a pas une erreur là ?(tu n'as pas montré le code)

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Non ce n'est pas un problem consernant le nom du fichier ni le chemin car la lecture du meme fichier retourne un resultat avec succes d'ailleur j'ai essayer sur bcp de fichiers que ça soit "xml" ou "xsd" ça ne genere aucune modification, aucune balise de nouveau à signaler lors de l'execution de mon code .
    Et le plus bizzard c'est que l'execution ne genére aucune erreur ,reste à savoir s'il existe une autre instruction à ajouter(droit de modif par ex),Personnelement j'ai beau chercher mais mon fichier xml rest tjs intacte. En attendant je vais ressayer d'executer mon code en esperant que ça marche ...

  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
    est-ce que tu "écrit" le dom dans un fichier??!! Parce que là, on a que le code de lecture!

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Est-ce que tu "écrit" le dom dans un fichier??!! Parce que là, on a que le code de lecture!
    Effectivement le code plus ton post laissent à penser que tu ne fais pas d'écriture ensuite.
    Ce que tu nous as montré ne correspond qu'a création d'un Objet Document en lecture d'un fichier XML, puis a la modification de cet Objet en mémoire.
    Depuis ton Document tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String res = new XMLOutputter(Format.getPrettyFormat()).outputString(document);
    Pour savoir a quoi il ressemble en mémoire.
    Reste à copier la chaîne de caractères dans le fichier de sortie
    http://java.developpez.com/faq/java/...ngage_fichiers

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    est-ce que tu "écrit" le dom dans un fichier??!! Parce que là, on a que le code de lecture!
    Desole mais la je ne vous suit plus normalemnt le appendchilde se charge de créer un nouveau fils de la racine avec le neoud de l'elemnt="monelement"

    Donc cela veux dir ecrire dans le document une nouvelle balise<monelement>
    qui serait une balise fille de la balise racine .Si j'ai tord veuillez me corriger .Donc d'apres mes connaissance le code que j'ai poster au debut contient une instruction d'ecriture via le appendchild.

  8. #8
    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
    T'as tord, tu ne fait que modifier le DOM en mémoire. Il est complètement détaché du fichier. Quand tu modifie un DOM, çà va pas magiquement s'écrire sur le fichier, faut l'envoyer sur le fichier après

    Pallando t'as déjà fourni le code.

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Citation Envoyé par Viscapon Voir le message
    .Donc d'apres mes connaissance le code que j'ai poster au debut contient une instruction d'ecriture via le appendchild.
    Effectivement tu modifies bien le document. Le problème c'est que ne modifies que l'objet en mémoire.
    Celui-ci est décorélé du fichier depuis lequel tu as lu le XML (dans ton cas C:\xml\fihcier.xml). Les modifications que tu fais sur le Document ne se répercutent pas sur le fichier physique.

    Tu dois donc à la fin écrire ton Objet Document dans un fichier (je te conseille de ne pas écrire dans ton fichier d'entré au départ).
    Pour cela tu peux par exemple créer une string depuis le XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String res = new XMLOutputter(Format.getPrettyFormat()).outputString(document);
    puis ecrire cette String dans un fichier avec les outils de manipulations de fichier de JAVA du type :
    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
     
    public static Boolean print(String content, String fileName) throws Exception {
    		FileOutputStream fos = null;
    		Boolean res = false;
    		try {
    			fos = new FileOutputStream(fileName);
    			fos.write(content.getBytes(), 0, content.getBytes().length);
    			res = true;
    		} catch (Exception e) {
    			throw e;
    		} finally {
    			try {
    				fos.flush();
    				fos.close();
    			} catch (Exception e) {
    			}
    		}
    		return res;
    	}

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    T'as tord, tu ne fait que modifier le DOM en mémoire. Il est complètement détaché du fichier. Quand tu modifie un DOM, çà va pas magiquement s'écrire sur le fichier, faut l'envoyer sur le fichier après

    Pallando t'as déjà fourni le code.
    Comment puis-je transferer le fichier ou bien l'arbre en memoire sur mon fichier de depart.

    Tu dois donc à la fin écrire ton Objet Document dans un fichier (je te conseille de ne pas écrire dans ton fichier d'entré au départ).
    Pkoi il est deconseillé de modifier directment le fichier de depart.Parceque malheuresment c lui la cible car il s'agit d'une application ou bien plus precisement d'une interface qui modifie dynamiqument des fichier existnant donc créer un nouveau document et refaire le trvail ne s'vere pas un bonne solution pr le moment.
    merci

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Citation Envoyé par Viscapon Voir le message
    Comment puis-je transferer le fichier ou bien l'arbre en memoire sur mon fichier de depart.
    Et bien regarde mes deux derniers posts, ils expliquent tout :
    1. Tu transformes ton XML en String
    2. Tu copies ce String dans le fichier

    Les deux étapes sont décrites dans les posts précédents


    Citation Envoyé par Viscapon Voir le message
    Pkoi il est deconseillé de modifier directment le fichier de depart.Parceque malheuresment c lui la cible car il s'agit d'une application ou bien plus precisement d'une interface qui modifie dynamiqument des fichier existnant donc créer un nouveau document et refaire le trvail ne s'vere pas un bonne solution pr le moment.
    merci
    Je te le déconseille Dans un premier temps. Simplement parceque quand tu commences il est bon de voir le resultat dans un nouveau fichier. Juste au cas ou le resultat soit pas celui que tu attendes.Ca t'évite "d'abimer" ton fichier source.
    Donc dans un premier temps tu écris dans un nouveau fichier, et quand tu seras sûr que tu as le bon résultat tu pourras alors changer directement ton fichier source.

  12. #12
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    String res = new XMLOutputter(Format.getPrettyFormat()).outputString(document);
    pallando ,juste une petite remarque concernat cette ligne de code car mon editeur n'arrive pas a digérer cette ligne il s'agit bien d'un buffer qui contient mon fichier xml de depart mais c quoi ce "Format.getPrettyFormat())." est ce pour presrever le format initial càd le standard xml parceque il m'affiche une erreur car il ne reconnait pas cette methode ?J'ai poster au debut de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import org.jdom.output.XMLOutputter;
    import org.jdom.output.Format;
    mais il ne rocnnait pas ce pckage !

    Et dois-je la mettre directement apres avoir parser mon fichier avec DOM?
    merci

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Citation Envoyé par Viscapon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import org.jdom.output.XMLOutputter;
    import org.jdom.output.Format;
    Ah oui mince, cette ligne provient des outils fourni par JDOM qui est vraiment bien pour maniupler les XML avec JAVA et qui est une surcouche de DOM.

    http://www.jdom.org/
    http://cynober.developpez.com/tutoriel/java/xml/jdom/

    Dans ton cas DOM : (pris sur : http://java.developpez.com/faq/xml/?page=dom) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Document document = ....;
                        DOMSource domSource = new DOMSource(document);
                        StringWriter writer = new StringWriter();
                        StreamResult result = new StreamResult(writer);
                        TransformerFactory tf = TransformerFactory.newInstance();
                        Transformer transformer = tf.newTransformer();
                        transformer.transform(domSource, result);
                    String stringResult = writer.toString();
    Ceci dit je te conseille de te plonger dans JDOM qui est vraiment très simple.
    Pour ça tu dois télecharger le jar sur le site de JDOM.
    Bon courage
    Pallando

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 29
    Par défaut
    Salut,

    Je viens de trouver ta solution pour changer un arbre DOM en String avec DOM.

    Cependant il me rajoute des infos supplémentaires dans ma chaine finale. Les infos supp sont du genre namespace, etc.

    Est ce que tu sais comment faire pour ne pas les avoir lors de la transformation ?

    Merci

Discussions similaires

  1. Ajouter des noeud dans un fichier XML
    Par chinoismasque dans le forum Windows Phone
    Réponses: 4
    Dernier message: 02/08/2011, 16h32
  2. Ajouter un noeud dans un fichier XML
    Par rambc dans le forum Général Python
    Réponses: 4
    Dernier message: 05/05/2010, 13h55
  3. [JDOM] ajout d'un noeud dans un fichier xml en java
    Par sampaiX dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 22/04/2010, 17h53
  4. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 17h38
  5. [VB.NET] [XML] Suppression d'un noeud dans un fichier XML
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2004, 11h24

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