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 :

Comment traiter les occurences d'un Xml en java ?


Sujet :

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

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut Comment traiter les occurences d'un Xml en java ?
    Bonjour,

    Je souhaiterais savoir comment je pourrais traiter des occurences d'un fichier XML tels que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Test>
      <Information T="A">C</Information> 
      <Information T="B">D</Information> 
    </Test>
    Comment je pourrais traiter cette occurence avec une hashmap ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if("Information".equals(rawName)){
            		map_Info.put("T=A",recupChaine);
            		map_Info.put("T=B",recupChaine);
            		test.setMap_Info(map_Info);
     
            	    Set entries = map_Info.entrySet();
            	    Iterator it = entries.iterator();
            	    while (it.hasNext()) {
            	      Map.Entry entry = (Map.Entry) it.next();
            	      System.out.println(entry.getKey() + "-->" + entry.getValue());
            	    }
    Le souci étant que ma recupChaine écrase ma précédente.
    Du coup cela me fait
    T=A-->D au lieu de T=A-->C
    T=B-->D

    Merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Citation Envoyé par larmedesang Voir le message
    Je souhaiterais savoir comment je pourrais traiter des occurences d'un fichier XML tels que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Test>
      <Information T="A">C</Information> 
      <Information T="B">D</Information> 
    </Test>
    Tu veux quoi en sortie à partir de ce fichier ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    J'ai oublié de poster cette étape de mon endElement (sax) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                	else if("Test".equals(rawName)){
                		test.setInformation(derniereChaineLue);
                		map_Test.put("T=A",test.getInformation());	            	
                		map_Test.put("T=B",test.getInformation());	
                		truc.setMap_Information(map_Test);
                	}
    Ce que je souhaiterais récupérer c'est
    T=A-->C
    T=B-->D


    Mon souci est comment récupérer dans "test.setInformation(derniereChaineLue);"
    de manière à ce que je puisse retrouver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    map_Test.put("T=A",test.getInformation());<--T=A-->C            	
    map_Test.put("T=B",test.getInformation());<--T=B-->D

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Tu veux quoi en sortie à partir de ce fichier ?
    Bonjour,

    Merci pour ta réponse.
    à partir du xml je récupère les données pour les mettres dans un fichier text.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    map_Test.put("T=A",test.getInformation()); //T=A-->C            	
    map_Test.put("T=B",test.getInformation());  //T=B-->D
    Or mon souci est au niveau de la récupération et attribution des données dans mon hashmap car seule la dernière valeur récupéré est stockée donc je me retrouve avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    map_Test.put("T=A",test.getInformation()); //T=A-->D            	
    map_Test.put("T=B",test.getInformation());  //T=B-->D
    à cause de ceci :
    test.setInformation(derniereChaineLue);

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    La réponse me parait être simple utilisé la valeur de l'attribut

    Voir org.xml.sax.ContentHandler.startElement et org.xml.sax.Attributes
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par Nemek Voir le message
    La réponse me parait être simple utilisé la valeur de l'attribut

    Voir org.xml.sax.ContentHandler.startElement et org.xml.sax.Attributes
    Bonjour,

    Merci pour ta réponse.
    Oui effectivement, je suis passé par la récupération des attributs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    map_Information.put(attQName+"="+attValue,charactere)
    cela marche bien pour le cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Test>
      <Information T="A">C</Information> 
      <Information T="B">D</Information> 
    </Test>
    Par contre nouveau cas n°2 confronté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <Test>
      <Information T="A">C</Information> 
      <Date> 2011-04-06 <Date>
      <Information T="B">D</Information> 
    </Test>

    Pour ça je vais voir si je peux rajouter un compteur pour que la date ne soit lue qu'une fois. Votre avis?

    Pour le cas N°3 je pense qu'il faut passer par une liste en récupérant les setters ( votre avis ? ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <Test>
      <Information T="A">C</Information> 
      <Periode>
          <Debut> 2011-04-06 </Debut>
      </Periode>    
      <Information T="B">D</Information> 
      <Periode>
          <Debut> 2011-06-08 </Debut>
      </Periode>    
    </Test>
    Cdt,

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Bon bein pour le cas n°2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <Test>
      <Information T="A">C</Information> 
      <Date> 2011-04-06 <Date>
      <Information T="B">D</Information> 
    </Test>
    Je pensais faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                		map_Information.put(attQName+"="+attValue,charactere);		
                		test.setMap_Information(map_information);
     
                		for (i=0 ; i<1; i++){
                		information.setDate(charactere);	
                   		}
     
                	}
    Mais bien entendu ça ne sert à rien et ne marche pas car à la deuxième occurence il va tenter d'ajouter une date avec un charactere qui ne correspond pas.

  8. #8
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Il faut rajouter un peu de sémantique, un simple exemple n'est pas une explication mais un support.

    A quoi est rattachée la date ?
    Peut-il y avoir plusieurs éléments Informations avec la même valeur pour l'attribut T ?
    Le format du XML est figé ou c'est à toi de le définir ? As-tu une DTD/XSD ou autre pour décrire le format de ton fichier ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Il faut rajouter un peu de sémantique, un simple exemple n'est pas une explication mais un support.

    A quoi est rattachée la date ?
    Peut-il y avoir plusieurs éléments Informations avec la même valeur pour l'attribut T ?
    Le format du XML est figé ou c'est à toi de le définir ? As-tu une DTD/XSD ou autre pour décrire le format de ton fichier ?
    Bonjour,

    En faite, je me retrouve avec ces différents cas de figure dans mon fichier XML en entrée sans parler de certaines balises facultatives qui du coup je ne vais pas pouvoir réaliser de liste comme je le pensais pour le cas n°3. Mais je vais devoir utiliser plein de boolean pour savoir où je me trouve, récupérer les noms de balises, les valeurs des attributs etc.. et devoir coder en dur pour mon serializer.

    La date est rattaché à la balise englobant la balise "date". Je n'ai pas très bien saisie la question.
    Le format XML est figé. J'ai bien une XSD.

    Cdt,

  10. #10
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Si tu as une XSD, je dirais de créer des classes bindés sur ta structure (JAXB inside ?)
    Au moment du parse tu crées les objets qui correspondent à ta structure (JAXB inside ?) et tu stockes le tout dans une map pour te faire plaisir
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Si tu as une XSD, je dirais de créer des classes bindés sur ta structure (JAXB inside ?)
    Au moment du parse tu crées les objets qui correspondent à ta structure (JAXB inside ?) et tu stockes le tout dans une map pour te faire plaisir
    Malheureusement, je dois poursuivre avec SAX.
    1) Lire la clé de l'attribut "T"
    2) Lire son contenu
    3 ) stocker en mémoire dans 2 variables inTA et inTB (initialisé à false)

    Dans mon endElement;
    if("xxx"equalsIgnoreCase(rowName)){
    instruction
    }
    else if ("T".equalsIgnoreCase(rowName)){
    RAZ des boolean inTA, inInfo, inDate
    }
    else if ("Info" && "test" && "inQ"){

    }

    Récupérer la clef de la HashMap -->"Test"+rowName+mes strings déduit du booléen qui m'indique l'attribut :
    - inTA ->TA
    - inTB -> TB

    faire appel à mon serializer puis
    HashMap.get("Test_Info_TA")
    HashMap.get("Test_Info_TB")

    Enfin je vais tacher d'essayer de faire ça.

  12. #12
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Tu n'as que T=A et T=B ? Pas d'autre valeurs possibles ? Pas possible d'avoir plusieurs fois T=A ou T=B ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Tu n'as que T=A et T=B ? Pas d'autre valeurs possibles ? Pas possible d'avoir plusieurs fois T=A ou T=B ?
    Disons que pour le cas n°2 j'ai plutôt sur 3 occurences par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Test>
      <Information T="A">C</Information> 
      <Date> 2011-04-06 <Date>
      <Information T="B">D</Information> 
      <Information T="K">L</Information> 
    </Test>

  14. #14
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Je considère qu'il s'agit d'un oui à mes deux premières questions, cependant ca ne répond pas à la troisième ni aux autres.

    Je pense qu'il faudrait que tu donnes ton schéma, voir une version simplifiée avec le format de ton choix genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Test=(Information,(Date|Periode)?)*
    Information=<TEXT>
    Date=<TEXT>
    Periode=Debut
    Debut=<TEXT>
    Information@T=<TEXT>
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Discussions similaires

  1. Comment traiter les espaces dans le nom du fichier
    Par maban dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/08/2007, 20h25
  2. [GD] Comment traiter les yeux rouges ?
    Par Roromix dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 04/06/2007, 12h38
  3. Comment traiter les GError **error ?
    Par troumad dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 02/04/2007, 09h30
  4. [VB.NET] Page Edition, comment traiter les <br?
    Par zigoto dans le forum ASP.NET
    Réponses: 12
    Dernier message: 08/02/2005, 17h05

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