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 :

[Débutant(e)] écrire sur un fichier XML à partir de java [DOM]


Sujet :

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

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut [Débutant(e)] écrire sur un fichier XML à partir de java
    salut,

    Mon application contient une classe Main qui contient la méthode main() (la méthode principale du programme). Cette méthode prend en paramètre le chemin du fichier de config XML. La classe Main instancie une classe MainFrame dont le constructeur reçoit en paramètre le chemin de ce fichier. l'objet MainFrame est une fenêtre. Cette fenêtre contient un bouton qui affiche une boite de dialogue qui permet de changer un mot de passe se trouvant stocké dans le fichier xml. Donc je souhaiterais écrire sur le fichier xml. Mais comment faire pour récupérer le chemin de ce fichier à partir de ma boite de dialogue.

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut
    dites-moi, avant de répondre à ma question, est-ce que je dois utiliser XSLT pour modifier une partie du fichier XML?

    Merci

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 63
    Points : 74
    Points
    74
    Par défaut
    XSLT serais un bon choix mais si tu veut utiliser java c'est DOM ou SAX

  4. #4
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut
    je ne suis pas d'accord: SAX et DOM permettent de lire un document XML tandis que XSLT permet de le modifier, comme cela est expliqué ici:
    http://java.developpez.com/faq/java/...XML#saxDomXslt

    Merci

  5. #5
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut
    Pour revenir à ma question initiale, pouvez-vous me dire comment je pourrai récupérer le path du fichier xml de config?

    Merci beaucoup

  6. #6
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Citation Envoyé par Samanta
    je ne suis pas d'accord: SAX et DOM permettent de lire un document XML tandis que XSLT permet de le modifier, comme cela est expliqué ici:
    http://java.developpez.com/faq/java/...XML#saxDomXslt

    Merci
    DOM permet de générer des fichiers XML.

  7. #7
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Si tu utilise un boite de dialogue en JAVA, ca doit etre un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      private JFileChooser fileChooser = new JFileChooser();
      private File fileXml;
    et donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
          int choix = fileChooser.showOpenDialog(this);
          if (choix == JFileChooser.APPROVE_OPTION) {
            fileXml = fileChooser.getSelectedFile(); // là tu as un File!!
            System.out.println("chemin du fichier: " + fileXml.getAbsolutePath());
     
          ...
          }

    Voilap, en esperant avoir repondu at ur questiontion

  8. #8
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut
    J'ai trouvé un moyen pour récupérer le path de mon fichier XML à partir de la boite de dialogue. Comme je ne peux pas instancier la classe Mainframe une 2ème fois, je dois juste récupérer son instance existante pour pouvoir utiliser ses variables et méthodes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* A static reference to the mainframe used for dialogs */
        private static MainFrame m_MainFrame;
    La variable ci-dessus est une instance de MainFrame.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     public static MainFrame getInstance() {
            return m_MainFrame;
        }
    Cette méthode permet de récupérer l'instance.

    Pour connaitre le path qui est stocké dans la variable m_PropertiesFileName il suffit de faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fileName = MainFrame.getInstance().m_PropertiesFileName
    Maintenant que j'ai récupéré le path, je vais tenter de modifier le fichier et je vous tiendrai au courant

    ciao!

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 63
    Points : 74
    Points
    74
    Par défaut
    je ne suis pas d'accord: SAX et DOM permettent de lire un document XML tandis que XSLT permet de le modifier, comme cela est expliqué ici:
    http://java.developpez.com/faq/java/...XML#saxDomXslt

    Merci
    SAX et DOM permettent de modifier le document xml la seule difference qui ya c'est que XSLT et DOM charge l'arborescence du document en memoire alors que SAX fait une gestion evenementielle du document, sinon j'ai dit que XSLT etait plus adequat pour ton traitement

  10. #10
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut
    Bonjour ,

    le problème est réglé est voici comment:
    J'ai utilisé DOM plutôt que XSLT puisque la programmation se fait en java. Le but était de modifier un fichier XML, il fallait donc créer un document à partir de ce fichier, parcourir le document avec xpath puis modifier les attributs avec setAttribute() de DOM:
    http://java.developpez.com/faq/java/...om#modifierDom
    mais ceci ne suffit pas car la modification n'est pas enregistrée sur le fichier XML il faut donc créer un fichier de sortie qui contiendra le document que nous avons modifier puis lui affecter l'adresse du fichier initial, ce dernier sera donc remplacé par le nouveau fichier. Je me suis d'abord inspiré de ceci: http://java.developpez.com/faq/java/...lt#creerXmlDom
    puis j'ai trouvé la classe suivante qui a tout résolu:
    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
    import javax.xml.parsers.*; 
    import org.w3c.dom.*; 
    import org.xml.sax.*; 
    import javax.xml.transform.*; 
    import javax.xml.transform.dom.*; 
    import javax.xml.transform.stream.*; 
    import java.io.*; 
     
    public class CreationDOM{
    	public static void transformerXml(Document document, String fichier) {
            try {
                // Création de la source DOM
                Source source = new DOMSource(document);
     
                // Création du fichier de sortie
                File file = new File(fichier);
                Result resultat = new StreamResult(fichier);
     
                // Configuration du transformer
                TransformerFactory fabrique = TransformerFactory.newInstance();
                Transformer transformer = fabrique.newTransformer();
                transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
     
                // Transformation
                transformer.transform(source, resultat);
            }catch(Exception e){
            	e.printStackTrace();	
            }
        }
    	public static void main(String[] args){
    		try{
    			// Création d'un nouveau DOM
    			DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
    			DocumentBuilder constructeur = fabrique.newDocumentBuilder();
    			Document document = constructeur.newDocument();
     
    			// Propriétés du DOM
    			document.setXmlVersion("1.0");
    			document.setXmlStandalone(true);
     
    			// Création de l'arborescence du DOM
    			Element racine = document.createElement("annuaire");
    			racine.appendChild(document.createComment("Commentaire sous la racine"));
     
    			Element personne = document.createElement("personne");
    			personne.setAttribute("id","0");
    			racine.appendChild(personne);
     
    			Element nom = document.createElement("nom");
    			nom.setTextContent("un nom");
    			personne.appendChild(nom);
     
    			Element prenom = document.createElement("prenom");
    			prenom.setTextContent("un prénom");
    			personne.appendChild(prenom);
     
    			Element adresse = document.createElement("adresse");
    			adresse.setTextContent("une adresse");
    			personne.appendChild(adresse);
     
    			document.appendChild(racine);
     
    			//Sauvegarde du DOM dans un fichier XML
    			transformerXml(document, "./NouveauDocument.xml");
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}	
    }
    Je reste à votre disponibilités pour des questions

    A++

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    Désolé de remonter ce topic mais j'ai un problème dans le code.
    A partir du programme suivant qui ressemble beaucoup au programme précédent, j'aimerais si possible ajouter des éléments les uns à la suite des autres dans le document XML car actuellement, lorsque je crée plusieurs éléments, seul le dernier élément est affiché (balise+attribut) dans le document 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
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    package xml;
     
    import javax.swing.JOptionPane;
    import javax.xml.parsers.*; 
    import org.w3c.dom.*; 
    import org.xml.sax.*; 
    import javax.xml.transform.*; 
    import javax.xml.transform.dom.*; 
    import javax.xml.transform.stream.*; 
    import java.io.*; 
     
    public class CreationDOM{
    	public static String txt;
    	public static String txt2;
    	public static String txt3 = "";
     
    	public static void transformerXml(Document document, String fichier) {
            try {
                // Creation of the DOM source
                Source source = new DOMSource(document);
     
                // Creation of the XML file
                File file = new File(fichier);
                Result resultat = new StreamResult(fichier);
     
                // Configuration of the transformer
                TransformerFactory fabrique = TransformerFactory.newInstance();
                Transformer transformer = fabrique.newTransformer();
                transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
     
                // Transformation
                transformer.transform(source, resultat);
            }catch(Exception e){
            	e.printStackTrace();	
            }
        }
     
    	public static void creationDOM(){
     
    		try{
    			// Creation of a new DOM
    			DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
    			DocumentBuilder constructeur = fabrique.newDocumentBuilder();
    			Document document = constructeur.newDocument();
    			Element racine = document.createElement("Model");
    			racine.appendChild(document.createComment("This is a XML document for a model"));
    			document.appendChild(racine);
     
    			// Properties of the DOM
    			document.setXmlVersion("1.0");
    			document.setXmlStandalone(true);
     
    			// Creation of the tree of the DOM
     
     
    			for (int i = 1; i < 4; i++) 
    			{
     
    			//if((txt!=null) && (txt2!=null))
    			//{
    					Element modele = (Element) document.createElement(txt);
    					modele.appendChild(document.createTextNode(txt2));
    					racine.appendChild(modele);
    					//Element nom = document.createElement(txt2);
    					//txt3 += txt + "," + txt2 + ",";
    					//nom.setTextContent(txt2);
    					//racine.appendChild(nom);
     
    			//}
    			}
     
     
     
    			//Save the DOM in the following XML File
    			transformerXml(document, "./Project.xml");
     
    		}catch(Exception e){
    			e.printStackTrace();
    		}
     
     
    	}	
     
    	public static void main(String args[])
    	{
    		while(true)
    		{
     
    			txt= JOptionPane.showInputDialog(null, "Enter a name for a tag");
    			if (txt == null)
    			{
    				 System.out.println("No name given for the tag");
    				 break;
    			}
    			else 
    			{
    				System.out.println("Name of the tag : " + txt);
    			}
     
     
    			txt2= JOptionPane.showInputDialog(null, "Enter a name for an attribute");
    			if (txt2 == null)
    			{
    				System.out.println("No name given for the attribute");
    				break;
    			}
    			else 
    			{
    			     System.out.println("Name of the attribute : " + txt2);
    			}
     
    			creationDOM();
    			//System.exit(1);
     
    		}	
     
    		}
    }
    Merci d'avance pour votre aide

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Samanta Voir le message
    Bonjour ,

    le pb est réglé est voici comment:
    g utilisé DOM plutôt que XSLT puisque la programmation se fait en java. Le but était de modifier un fichier XML, il fallait donc créer un document à partir de ce fichier, parcourir le document avec xpath puis modifier les attributs avec setAttribute() de DOM:
    http://java.developpez.com/faq/java/...om#modifierDom
    mais ceci ne suffit pas car la modification n'est pas enregistrée sur le fichier XML il faut donc créer un fichier de sortie qui contiendra le document que nous avons modifier puis lui affecter l'adresse du fichier initial, ce dernier sera donc remplacé par le nouveau fichier. Je me suis d'abord inspiré de ceci: http://java.developpez.com/faq/java/...lt#creerXmlDom
    puis g trouvé la classe suivante qui a tout résolu:
    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
    import javax.xml.parsers.*; 
    import org.w3c.dom.*; 
    import org.xml.sax.*; 
    import javax.xml.transform.*; 
    import javax.xml.transform.dom.*; 
    import javax.xml.transform.stream.*; 
    import java.io.*; 
     
    public class CreationDOM{
    	public static void transformerXml(Document document, String fichier) {
            try {
                // Création de la source DOM
                Source source = new DOMSource(document);
     
                // Création du fichier de sortie
                File file = new File(fichier);
                Result resultat = new StreamResult(fichier);
     
                // Configuration du transformer
                TransformerFactory fabrique = TransformerFactory.newInstance();
                Transformer transformer = fabrique.newTransformer();
                transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
     
                // Transformation
                transformer.transform(source, resultat);
            }catch(Exception e){
            	e.printStackTrace();	
            }
        }
    	public static void main(String[] args){
    		try{
    			// Création d'un nouveau DOM
    			DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
    			DocumentBuilder constructeur = fabrique.newDocumentBuilder();
    			Document document = constructeur.newDocument();
     
    			// Propriétés du DOM
    			document.setXmlVersion("1.0");
    			document.setXmlStandalone(true);
     
    			// Création de l'arborescence du DOM
    			Element racine = document.createElement("annuaire");
    			racine.appendChild(document.createComment("Commentaire sous la racine"));
     
    			Element personne = document.createElement("personne");
    			personne.setAttribute("id","0");
    			racine.appendChild(personne);
     
    			Element nom = document.createElement("nom");
    			nom.setTextContent("un nom");
    			personne.appendChild(nom);
     
    			Element prenom = document.createElement("prenom");
    			prenom.setTextContent("un prénom");
    			personne.appendChild(prenom);
     
    			Element adresse = document.createElement("adresse");
    			adresse.setTextContent("une adresse");
    			personne.appendChild(adresse);
     
    			document.appendChild(racine);
     
    			//Sauvegarde du DOM dans un fichier XML
    			transformerXml(document, "./NouveauDocument.xml");
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}	
    }
    Je reste à votre disponibilités pour des questions

    A++
    ton code ne fait juste que remplacer ce qui était écrit dans le xml par ce qu'on rajoute !!!

    comment faire pour seulement rajouter des données a un xml sans effacer ce qu'il y avait avant ?

    merci

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

Discussions similaires

  1. Comment lire des données d'un fichier XML à partir de java
    Par kamaldev dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 25/08/2006, 20h29
  2. [débutant] Opération sur un fichier XML
    Par espadon1 dans le forum Modules
    Réponses: 5
    Dernier message: 31/05/2006, 12h38
  3. Réponses: 32
    Dernier message: 17/05/2006, 17h03
  4. Réponses: 2
    Dernier message: 27/05/2004, 01h40
  5. Insertion dans un fichier xml à partir d'un xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/03/2003, 10h45

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