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

  1. #1
    Futur Membre du Club
    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 : 34
    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
    Points : 5
    Points
    5
    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
    Futur Membre du Club
    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 : 34
    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
    Points : 5
    Points
    5
    Par défaut
    Petit up, le problème est encore insoluble..

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    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à.

  4. #4
    Futur Membre du Club
    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 : 34
    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
    Points : 5
    Points
    5
    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 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    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.

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 211
    Points : 8 316
    Points
    8 316
    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.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    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.*

  8. #8
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Si tu veux, mais le problème ne se situe pas au niveau de la librairie utilisé, mais bien de son fichier source.

  9. #9
    Futur Membre du Club
    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 : 34
    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
    Points : 5
    Points
    5
    Par défaut
    Je m'excuse vraiment, le XML que j'ai affiché a été édité pour l'exemple en fait, vous pouvez voir que agenceAffectee est elle bien confectionnée.
    Pour le reste, c'était des balises vides à la base effectivement, et je les avait rempli pour vous montrer un exemple plus concret, mais j'ai oublié de re-formater les balises au passage, désolé><"
    Les fichiers se génèrent bien complétés maintenant.
    De plus, la solution de kolodz me parait assez simple et plus adaptée à ce genre de petit fichier non ?
    Et encore une fois désolé, mais le fichier XML ne comporte pas plusieurs clients, mais une une balise <client> avec les enfants vus précédemment, une balise <instrument> avec tout ses enfants, et enfin <intervention>, avec ses enfants.
    Du coup le getElementsByTag() me parait être la solution la plus évidente... Ou y a-t-il un équivalent JDOM aussi pratique?

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par Okwolus Voir le message
    Du coup le getElementsByTag() me parait être la solution la plus évidente... Ou y a-t-il un équivalent JDOM aussi pratique?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(Element elementMachin : racine.getDescendants(new ElementFilter("machin"))) {
     
        ...
     
    }

  11. #11
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    bonjour Okwolus,

    As tu réussis à développer ce que tu voulais ?

    J'ai été confronté au même problème que toi il y a 2 ou 3 ans : Lire un fichier clients XML assez simple et pour un client dont l'ID est donné en paramètre, afficher dans des JTextArea ses propriétés.

    Pour cela j'ai créé 3 objets : Client, CatalogueClients et un objet utilitaire Static qui me rend quelque services pour discuter avec l'API XML.
    J'ai utilisé JAXP qui est en standard dans jdk et ne nécessite pas d'import de quoi que ce soit pour manipuler un DOM en lecture.

    Si tu es intéressé, je peux te donner tout ca (une centaine de lignes de code je pense).

    Marc

  12. #12
    Futur Membre du Club
    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 : 34
    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
    Points : 5
    Points
    5
    Par défaut
    Bonjour Marc,

    Je t'avoue avoir laissé le développement du traitement XML de côté pour me focaliser sur autre chose (ah les boss ^^).
    Une solution avec JAXP est invisageable, surtout si c'est léger à utiliser. Ta solution m'interesse donc

  13. #13
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    bonjour Okwolus,

    j'ai publié les sources sur DVP la semaine dernière. Tu peux la télécharger à l'adresse : http://java.developpez.com/telecharg...-XML-avec-JAXP

    bon courage,

    Marc

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, 09h41
  2. Réponses: 3
    Dernier message: 24/04/2009, 09h39
  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, 18h15
  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, 15h25
  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, 17h49

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