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 :

Programme qui met à jour l'inventaire [DOM]


Sujet :

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

  1. #1
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Juin 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 53
    Par défaut Programme qui met à jour l'inventaire
    Bonjour,
    j'ai un fichier achats.txt :
    Jean Charles, 3214324565, 321, 2
    Yvan Richard, 5435435545, 321, 1
    Yvette Gagnon, 4324324243, 1, 12
    est un fichier inventaire.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="ISO-8859-1"?>
     <inventaire>
     <produit code="1" prix="432.00" quantité= "43" />
     <produit code="32" prix="32.00" quantité= "100"  />
     <produit code="321" prix="31.00" quantité= "200"  />
     </inventaire>
    on mettant a jour mon fichier inventaire.xml a partir du fichier achats.txt alors que mon résultat sois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="ISO-8859-1"?>
     <inventaire>
     <produit code="1" prix="432.00" quantité= "31" />
     <produit code="32" prix="32.00" quantité= "100"  />
     <produit code="321" prix="31.00" quantité= "197"  />
     </inventaire>
    mon programme java et :
    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
     import org.w3c.dom.*;
     import java.io.*;
     import javax.xml.parsers.*;
     import javax.xml.transform.*;
     import javax.xml.transform.dom.*;
     import javax.xml.transform.stream.*;
     
     public class inventaire {
        public static void main(String[] args) throws Exception {
        DocumentBuilderFactory factory = 
         DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder parser = 
         factory.newDocumentBuilder();
        Document doc = parser.parse("inventaire.xml");
        Element racine = doc.getDocumentElement();
        NodeList nl = racine.getChildNodes();
        if (args[0].equals("ajoute")) {
         boolean ajout = false;
           for (int k = 0; k < nl.getLength(); ++k) {
              if(nl.item(k).getNodeType()==Node.ELEMENT_NODE) {
                 Element e = (Element) nl.item(k);
                 if(e.getAttribute("code").equals(args[1])) {
                    e.setAttribute("quantité",args[2]);
                    ajout=true;
                 }
              }
           }
           if( ! ajout) {
             Element p = doc.createElement("produit");
             p.setAttribute("code", args[1]);
             p.setAttribute("quantité", args[2]);
             racine.appendChild(p);
         }
        }
        TransformerFactory tfact = TransformerFactory.newInstance();
        Transformer transformer = tfact.newTransformer();
        transformer.setOutputProperty("encoding", "ISO-8859-1");
        DOMSource source = new DOMSource(doc);
        FileWriter fw = new FileWriter("inventaire.xml");
        StreamResult result = new StreamResult(fw);    
        transformer.transform(source, result);
        }
     }
    mes j'arrive pas a avoir le bon résultat merci pour votre aide .

  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
    Et c'est quoi le résultat obtenu et le résultat voulu ?

    Parce que là je ne vois pas où tu fais intervenir le fichier achats.txt

    Par ailleurs, je te conseille d'utiliser JDOM au lieu du DOM de base. JDOM est beaucoup plus simple à manipuler.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Juin 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 53
    Par défaut
    quand j'exécute la fonction java Inventaire achats.txt inventaire.xml mon résultat et le même que au début alors y' a pas de modification pour le fichier inventaire.xml , malheureusement je peut pas l'utiliser dans ce programme las .
    merci pour votre aide.

  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
    Normal puisque "args[0]" n'est lu qu'une seule fois, et que c'est pour comparer s'il est égal à "ajoute". Ce qui n'est pas le cas puisqu'avec ta commande, il est égal à "achats.txt".

    Quand ce n'est pas le cas le programme ne fait rien.

    Logiquement tu devrais le savoir puisque c'est toi qui l'as fait ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Juin 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 53
    Par défaut
    j'ai vraiment pas compris ce que vous vêler dire exactement

  6. #6
    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
    ... Je te parle du code Java que tu nous as montré quelques posts au-dessus. Tu te souviens ?

    args[0], tu vois ce que c'est ?

    C'est quelle partie de ce que je dis que tu comprends pas, et qu'est-ce qui commence à s'embrouiller dans ta tête quand tu le vois ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Juin 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 53
    Par défaut
    oui je comprend sa que args[0], mes comment il puis être égale a achats.txt ,et comment on pourrais changer sa .

  8. #8
    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
    Ben il l'est parce que args[0] c'est le premier paramètre de la commande, et que la commande que tu nous montres, son premier paramètre c'est "achats.txt"

    Or il est clair que ce n'est pas du tout ce que ton programme attend. Il attend "ajoute" et puis c'est tout.
    Peux-tu nous dire comment est-il possible que tu ne saches pas ça, puisque ce programme est le tien ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Juin 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 53
    Par défaut
    oui bien sur j'ai pas pense a ca on l'exécutant il prend la premier valeur , mes la j'ai modifier mon programme :
    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
     import org.w3c.dom.*;
     import java.io.*;
     import javax.xml.parsers.*;
     import javax.xml.transform.*;
     import javax.xml.transform.dom.*;
     import javax.xml.transform.stream.*;
     
     public class inventaire {
        public static void main(String[] args) throws Exception {
        DocumentBuilderFactory factory = 
         DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder parser = 
         factory.newDocumentBuilder();
        Document doc = parser.parse("inventaire.xml");
        Element racine = doc.getDocumentElement();
        NodeList nl = racine.getChildNodes();
     
    if (args[1].equals("ajoute")) {
         boolean ajout = false;
           for (int k = 0; k < nl.getLength(); ++k) {
              if(nl.item(k).getNodeType()==Node.ELEMENT_NODE) {
                 Element e = (Element) nl.item(k);
                 if(e.getAttribute("code").equals(args[0])) {
                    e.setAttribute("quantité",args[2]);
                    ajout=true;
                 }
              }
           }
           if( ! ajout) {
             Element p = doc.createElement("produit");
             p.setAttribute("code", args[0]);
             p.setAttribute("quantité", args[2]);
             racine.appendChild(p);
         }
        }
        TransformerFactory tfact = TransformerFactory.newInstance();
        Transformer transformer = tfact.newTransformer();
        transformer.setOutputProperty("encoding", "ISO-8859-1");
        DOMSource source = new DOMSource(doc);
        FileWriter fw = new FileWriter("inventaire.xml");
        StreamResult result = new StreamResult(fw);    
        transformer.transform(source, result);
        }
     }
    on l'exécutant j'ai cette erreur :
    [Fatal Error] inventaire.xml:3:42: Le nom d'attribut "quantit├" associÚ Ó un type d'ÚlÚment "produit" doit Ûtre suivi du caractÞre '='.

  10. #10
    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
    Typique d'une erreur d'encodage du fichier XML.
    Le header <?xml version="1.0" encoding="ISO-8859-1"?> annonce que le fichier est en iso-8859-1, alors qu'en réalité il est encodé en utf-8. Du coup le parseur le voit comme ça :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="ISO-8859-1"?>
     <inventaire>
     <produit code="1" prix="432.00" quantité= "43" />
     <produit code="32" prix="32.00" quantité= "100"  />
     <produit code="321" prix="31.00" quantité= "200"  />
     </inventaire>

    ce qui est mal formé car les © sont interdits dans les noms XML, d'où refus du parseur de continuer.

    La solution simple est de virer les accents puisque tu n'en as pas besoin. Sinon, il suffit d'utiliser le même encodage à l'enregistrement du fichier et dans le header xml <?xml version="1.0" encoding="nom-de-l-encodage"?>.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Juin 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 53
    Par défaut
    La je comprend rien j'ai réparé l'errer mes y 'a pas modification a mon fichier il reste le même ,j'arrive pas a avoir le résultat

  12. #12
    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
    Ah oui non mais des erreurs il y en a plein.

    - Je ne vois toujours aucune référence au fichier "achats.txt". Tu veux t'en servir, oui ou non ?
    - Le programme que tu montres ne fait rien si la commande pour l'appeler ne contient pas "ajoute". Tu as l'intention de mettre "ajoute" dans la commande, oui ou non ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Juin 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 53
    Par défaut
    j'aimerai ca avoir des exemple je pige pas la svp sa fais plusieurs jour que je suis sur ca merci .

  14. #14
    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
    Avoir des exemples de quoi ?

    Le programme Java, c'est toi qui nous l'as montré.
    Décris-nous, en détail et clairement, ce que font les lignes de ce programme.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Juin 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 53
    Par défaut
    avoir des exemples de mise a jour un fichier XML avec dom svp , je suis débutant dans la programmation java dom.
    Merci pour votre aide.

  16. #16
    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
    Le programme que tu nous as montré est un exemple de mise à jour de fichier XML avec DOM.
    Il ne fait pas du tout ce dont tu parles, mais il met à jour un fichier XML avec DOM. Il permet de changer la quantité disponible d'un produit précis, en indiquant le code de ce produit et la nouvelle quantité, dans la commande qui appelle le programme.

    je suis débutant dans la programmation java dom.
    Dans ce cas il suffit de lire des tutoriels et de s'en servir. Et seulement après avoir passé plusieurs jours à jouer avec, là tu peux commencer à programmer ce dont tu as besoin.
    Je te conseille JDOM au lieu de DOM : c'est beaucoup plus facile. Nous avons un tutoriel d'utilisation de JDOM.


    Mais je pense que tu es débutant en programmation tout court, parce que tes problèmes ne sont pas spécifiques ni à Java ni à DOM. Dans ce cas, ça va plutôt se compter en semaines.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Juin 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 53
    Par défaut
    Merci pour votre aide problème résolus

  18. #18
    Membre à l'essai
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Par défaut
    Bonjour Jean,

    J'aurais bien aimé que tu donne la solution. En effet, quand on voit un sujet marqué "Résolu", mais qui ne contient pas la solution.... c'est frustrant.

    Merci à toi de nous faire part de ta solution.

  19. #19
    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
    À ta place je ne le croirais pas quand il dit qu'il a trouvé la solution : à la rigueur il a peut-être copié un code qui marche de son petit camarade de classe. Mais il ne comprenait rien à ce que ça faisait et il y a de bonnes chances que le prof s'en soit rendu compte.

    Manifestement tu veux la même chose, dommage pour toi.
    La solution c'est d'apprendre comment marche XML, apprendre comment marche CSV, et relier les deux. Il n'y a pas à chercher des choses bizarres, juste à travailler.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  20. #20
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 5
    Par défaut
    Je fais face au même exercices et ça fait des jours que je tourne en rond. J'ai fait plusieurs tutorial mais je trouve aucun pour m'aider à comprendre comment mettre à jour mon fichier XML avec des données de mon fichier .txt.

    Est-ce qu'on pourrait m'enligner vers un tutorial? Ou me guider comment insérer mon fichier text et le faire lire.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. JButton qui met à jour un JLabel, possible ?
    Par nikwik dans le forum Débuter
    Réponses: 4
    Dernier message: 15/01/2011, 12h30
  2. Réponses: 0
    Dernier message: 18/08/2010, 20h01
  3. Macro qui met à jour un Workbook à partir d'un autre
    Par Sanny80 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/11/2009, 09h31
  4. Réponses: 2
    Dernier message: 11/08/2006, 11h11
  5. Réponses: 5
    Dernier message: 25/11/2003, 09h41

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