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
    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> [email protected]</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> [email protected]</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

  8. #8
    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
    Si tu veux, mais le probl�me ne se situe pas au niveau de la librairie utilis�, mais bien de son fichier source.
    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.

  9. #9
    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
    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 : 56
    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
    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"))) {
     
        ...
     
    }
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

  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
    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
    D�veloppeur Java
    Site Web

  12. #12
    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
    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
    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
    D�veloppeur Java
    Site Web

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