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 :

Récupération de données dans un XML


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 Java orienté métier/ Responsable info et réseaux
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Java orienté métier/ Responsable info et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Par défaut Récupération de données dans un XML
    Bonjour,

    Je travaille sur 2 applis complémentaires qui communiquent entre elles par fichier XML. Pour résumer, l'une d'entre elle est une appli nomade sans accès à une base SQL, l'autre est fixe et connectée à une base SQL en permanence.

    Pour que l'appli n°1 soit autonome, elle écrit des fichiers sous format XML ( cette étape est déjà réalisée, je génère bien mes XML renseignés ) que l'appli n°2 récupère et transfert elle sur la base SQL.

    extrait de la génération du XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
    <donnees>
         <client>
             <nom>Test génération<nom />
             <ville>Amiens<ville />
             <codePostal>80 000<codePostal />
             <adresse>1 rue test<adresse />
             <num>0303030303<num />
             <fax>0202020202<fax />
             <mail> test@test.test<mail />
             <contacTechnique> génération test<contacTechnique />
             <agenceAffectee>Amiens</agenceAffectee>
         </client>
    le code continu avec d'autres blocs sous la même forme

    Hors mon problème : dans la jungle de SAX, JDOM, etc.., je ne sais pas comment m'y prendre pour récup les données.

    Je voudrais pouvoir récupérer des données du XML pour les injecter dans des JTextFields afin d'être visualisé par l'utilisateur de l'appli n°2.

    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
    public void traitementFichierXml(File file){
    		String completeFileName =  file.getAbsolutePath();
    		org.jdom2.Document documentPrerempliXML = new org.jdom2.Document();
    		org.jdom2.Element racineDocument = new org.jdom2.Element("donnees");
    			SAXBuilder builder = new SAXBuilder();
     
    			try{
    				documentPrerempliXML = builder.build(file);
    				XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
    				sortie.output(documentPrerempliXML, System.out);
    			}
    			catch(Exception e){}
    			racineDocument = documentPrerempliXML.getRootElement();
    			FenCB fenPreremplie = new FenCB(idRecup, documentPrerempliXML);
    	}
    Ici je récupère le fichier parsé et la JFrame FenCB le prends en paramètre et est sensé le décortiquer et l'afficher dans des JTextFields via une méthode... J'attends votre aide, merci par avance!

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java orienté métier/ Responsable info et réseaux
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Java orienté métier/ Responsable info et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Par défaut
    Petit up, le problème est encore insoluble..

  3. #3
    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
    Hello,

    'Faudrait nous dire qu'est-ce qui ne te convient pas.

    Dans cette ligne : FenCB fenPreremplie = new FenCB(idRecup, documentPrerempliXML);,
    ton objet FenCB reçoit en paramètre un objet Document qui représente parfaitement ton fichier XML et qui est tout à fait exploitable.

    Nous ne pouvons pas deviner ce qui se passe dans cette classe et qui ne te plaît pas comme c'est déjà.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Java orienté métier/ Responsable info et réseaux
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Java orienté métier/ Responsable info et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Par défaut
    FenCB c'est juste une JFrame avec des labels et des textfields à l'intérieur. Le réel problème, c'est extraire les données du XML en fonction des balises, et les afficher dans les textfields cités plus haut.

    Je vois pas quoi utiliser ( filtres, extratction des balises, etc...), un peu perdu...

  5. #5
    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
    Mouais...
    Bon, c'est vrai que depuis JDOM 2, les tutoriels pourraient supporter un petit coup de jeune.

    Voici un petit bout de code qui montre comment lire les données de ton Document :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private void extractData(Document doc) {
      // doc.getRootElement() => <donnees>
      // <donnees>.getChildren() => tous les <client> qu'elle contient.
      for(Element client : doc.getRootElement().getChildren()) {
     
        String nom = client.getChildText("nom");
        String ville = client.getChildText("ville");
     
        System.out.println(nom + ": " + ville);
      }		
    }
    Ton XML et ton besoin sont très simples, il n'y a donc pas besoin de chercher midi à quatorze heures.

    Tu n'as pas besoin de filtre. Quant à extraire les balises, c'est pour ça qu'on utilise JDOM : il n'y a pas besoin de réfléchir. On le fait et ça marche, point.
    Pour quelque chose d'aussi simple, ça vaudrait presque la peine d'utiliser JAXB au lieu de JDOM. Mais bon, l'apprentissage est un peu plus long.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    En premier lieu ton XML est faux !
    Les balises fermantes s'écrive de cette façon </tagBalise>. Et non de cette façon <tagBalise/>, car cela est une balise auto-fermante. (ouverture et fermeture de balise en même temps.)

    En supposant qu'on ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Document doc = dBuilder.parse(fXmlFile);
    On peux parcourir l'ensemble des clients de la manière suivante :

    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
    import java.io.File;
    import java.io.IOException;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
     
    public class XMLReader {
    	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
    		File fXmlFile = new File("clients.xml");
    		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    		Document doc = dBuilder.parse(fXmlFile);
    		NodeList nList = doc.getElementsByTagName("client");
    		System.out.println("----------------------------");
    		for (int temp = 0; temp < nList.getLength(); temp++) {
    			Node nNode = nList.item(temp);
    			System.out.println("\nCurrent Element :" + nNode.getNodeName());
    			if (nNode.getNodeType() == Node.ELEMENT_NODE) {
    				Element eElement = (Element) nNode;
    				System.out.println("Nom : " + eElement.getElementsByTagName("nom").item(0).getTextContent());
    				System.out.println("ville : " + eElement.getElementsByTagName("ville").item(0).getTextContent());
    				System.out.println("codePostal : " + eElement.getElementsByTagName("codePostal").item(0).getTextContent());
    				System.out.println("adresse : " + eElement.getElementsByTagName("adresse").item(0).getTextContent());
    				System.out.println("num : " + eElement.getElementsByTagName("num").item(0).getTextContent());
    				System.out.println("fax : " + eElement.getElementsByTagName("fax").item(0).getTextContent());
    				System.out.println("mail : " + eElement.getElementsByTagName("mail").item(0).getTextContent());
    				System.out.println("contacTechnique : " + eElement.getElementsByTagName("contacTechnique").item(0).getTextContent());
    				System.out.println("agenceAffectee : " + eElement.getElementsByTagName("agenceAffectee").item(0).getTextContent());
    			}
    		}
    	}
    }
    Forcement avec ton xml exemple cela ne marchera jamais. Car, il est mal formaté et donc non parssable. Mais cet exemple est utilisable :
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <donnees>
    	<client>
    		<nom>Test génération</nom>
    		<ville>Amiens</ville>ville >
    		<codePostal>80 000</codePostal>
    		<adresse>1 rue test</adresse>
    		<num>0303030303</num>
    		<fax>0202020202</fax>
    		<mail> test@test.test</mail>
    		<contacTechnique> génération test</contacTechnique>
    		<agenceAffectee>Amiens</agenceAffectee>
    	</client>
    	<client>
    		<nom>IDIOT</nom>
    		<ville>NOMANLAND</ville>
    		<codePostal>66 666</codePostal>
    		<adresse>42 rue de l'enfer</adresse>
    		<num>06 42 42 42 42</num>
    		<fax>06 42 42 42 41</fax>
    		<mail> test@test.42</mail>
    		<contacTechnique>developpez.net</contacTechnique>
    		<agenceAffectee>FullIdiots</agenceAffectee>
    	</client>
    </donnees>

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  7. #7
    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 kolodz Voir le message
    On peux parcourir l'ensemble des clients de la manière suivante :
    Ouais enfin je recommanderais plutôt d'utiliser JDOM. Surtout que là, il y avait déjà pensé tout seul, alors pas besoin de retourner sur cette horreur de org.w3c.dom.*
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Récupération de données dans un fichier XML pour une utilisation dans une servlet
    Par Dredd619 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 24/04/2009, 08h41
  2. Réponses: 3
    Dernier message: 24/04/2009, 08h39
  3. [D6 => XML] Récupération de données dans une balise
    Par Bason_sensei dans le forum Delphi
    Réponses: 10
    Dernier message: 22/05/2006, 17h15
  4. récupération de données dans un TDBControlGrid
    Par dableuf dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/11/2004, 14h25
  5. Supprimer des données dans un xml
    Par pingoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 49
    Dernier message: 12/08/2004, 16h49

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