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 :

Se placer au bon noeud


Sujet :

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

  1. #1
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut Se placer au bon noeud
    Bonjour à tous

    Voilà je débute avec Java et encore plus avec XML, j'essaye de coder un petit gestionnaire de commandes/facturation.

    J'aimerais pouvoir me placer au bon noeud d'un fichier xml en fonction d'une chaine (le nom du client) passé en paramètre:

    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
    import java.io.*;
    import javax.xml.parsers.*;
    import org.xml.sax.SAXException;
    import org.w3c.dom.*;
    import javax.swing.*;
     
    class readerwriter {
        static String fichier = "";
        static String ligne = "";
        static BufferedReader fichierIn;
        static void read(String proprioRecherche)
        {
            try
            {
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = factory.newDocumentBuilder();
                Document document = builder.parse("facture.xml");
     
                NodeList elements = document.getElementsByTagName("client");
                int max = elements.getLength();
     
                //On parcours les noeuds de 0 à max
                int i = 0;
                String currentString = "";
                String message;
                while (i<max && currentString != proprioRecherche)
                {
                    Element elementClient = (Element)elements.item(i);
                    currentString = elementClient.getAttribute("nom");
                    i++;
                }
                if (i<max)//on a trouvé
                {
                    message = "Trouvé";
                }
                else //on a depassé => pas trouvé
                {
                    message = "pas toruvé";
                }
     
     
     
                JOptionPane.showMessageDialog(null, message);
     
     
     
            }
            catch (ParserConfigurationException ex)
            {
                JOptionPane.showMessageDialog(null, ex.getMessage());
            }
            catch (SAXException ex)
            {
                JOptionPane.showMessageDialog(null, ex.getMessage());
            }
            catch(IOException ex)
            {
                JOptionPane.showMessageDialog(null, ex.getMessage());
            }
            System.exit(0);
     
        }
    }
    (les catch je ne m'en suis pas occupé pour le moment)

    Mais j'ai manifestement un problème de logique.. (je n'ai jamais travaillé avec des arbres)

    voilà un exemple de 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"?>
    	<facture>
    		<client nom="Dupon" prenom="Henry" tel="0318351234" port="">
    			28 rue Mermoz 88000 DTC
    				<objet nom="poupée russe" type="restauration" marque="made in taiwan" materiau="">
    					Recoller la bouche
    				</objet>
    				<echeance date_in="200307" date_out="250307"/>			
    		</client>
    		<client nom="Torv" prenom="Linus" tel="0383252210" port="">
    			38 fbrg de France 90000 Belfort
    				<objet nom="jouet" type="creatoin" marque="made in taiwan" materiau="bois">
    					Decouper les pieces
    				</objet>
    				<echeance date_in="200307" date_out="250307"/>			
    		</client>
    	</facture>
    Or la fonction ne trouve jamais le client dans le xml.

    Pourriez vous m'aiguiller?

    Merci

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentString != proprioRecherche
    Tssss! En java, ta comparaison de chaînes de caractères s'écrit comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    !currentString.equals(proprioRecherche)
    == ou != ne génèrera pas d'erreur de compilation: c'est autorisé mais ça compare les références mémoires et non le contenu de ta chaîne... et donc tu ne retrouves jamais l'élément voulu
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Ahhh Super, merci beaucoup

    effectivement, j'avais oublié cette "subtilité" ^^

    Merci

  4. #4
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Une petite question tout de même.

    L'interêt de DOM est de conserver l'arborescence, mais comment accèder par exemple au noeud enfant de client "objet" ou "echeance"?

    Merci d'avance

    edit: je n'avais pas encore vu la faq java/xml, je suis en train de la lire, dsl
    re edit:

    Bon alors, à partir du code du premier post, si par exemple je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeList sousListe = elementClient.getChildNodes();
    et qu'ensuite je fais tourner un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sousListe.getNextSibling()
    dans un boucle jusqu'à trouver le noeud objet ou echeance (selon ce que je cherche)

    J'ai bon?
    (je suis désolé, mais c'est la première fois que je fais du java et que je parse du xml :s )

  5. #5
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Si jamais il y a quand meme beaucoup plus simple si tu veux faire des requêtes sur un document XML!

    Va faire un tour du côté de l'API XPath!

    Si tu as des questions n'hésite pas mais sache tout de suite que des boucles pour trouver ton bon client je trouve pas top perso...

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/05/2010, 19h49
  2. Réponses: 3
    Dernier message: 25/02/2010, 09h59
  3. Réponses: 5
    Dernier message: 14/12/2009, 09h36
  4. HTML placer le texte au bon endroit
    Par Magdix dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 16/10/2008, 14h30
  5. placer des balise xml au bon endroit dans le fichier existant.
    Par calimero91 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/01/2008, 09h43

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