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 :

Attributs avec plusieurs clés [SAX]


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
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Par défaut Attributs avec plusieurs clés
    Bonjour,

    je travaille sur un projet, et je doit pouvoir effectuer les opérations suivantes :
    - Charger un fichier XML local à l'aide du Plug-in Sax et récupérer les attributs et leurs valeurs (même les attributs qui se répètent).
    - Mettre les attributs que j'ai chargé dans une classe Bean.
    - Pour le moment j'affiche les attributs de mon Bean avec un Println().

    Voilà un petit apercu de la méthode de SAX qui m’intéresse dans la lecture de mon fichier XML :

    Classe:SimpleContentHandler
    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
    public void startElement(String nameSpaceURI, String localName, String rawName, Attributes attributs) throws SAXException {
                    System.out.println("Ouverture de la balise : " + localName);
     
                    if ( ! "".equals(nameSpaceURI)) { // espace de nommage particulier
                            //System.out.println("  appartenant a l'espace de nom : "  + nameSpaceURI);
                    }
     
                    System.out.println("  Attributs de la balise : ");
     
                    for (int index = 0; index < attributs.getLength(); index++) { // on parcourt la liste des attributs
                       System.out.println("     - " +  attributs.getLocalName(index) + " = " + attributs.getValue(index));
     
                        tableAttr[indx]=attributs.getLocalName(index);
                        tableValue[indx]=attributs.getValue(index);
                        indx++;
                    }
            }
    ici y aucun problème puisque je mets tous les attributs de mon fichier XML dans un tableau.

    Dans mon Bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (int index = 0; index < new SimpleContentHandler().getIndx(); index++) { 
    // on parcourt la liste des attributs
     
    varAtt.put(new SimpleContentHandler().getTableAttr()[index], new SimpleContentHandler().getTableValue()[index]);
     
    				//System.out.println("getListeObjectBaliseOuverteValue : "+ );
     
    	         }
    En haut j'utilise une hasMap varAtt pour récuperer chaque clé/valeur et les affecter au attributs de ma classe Bean comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    identifier=(String) varAtt.get("identifier");
    isin=(String) varAtt.get("isin");
    Donc mon problème, si vous l'avez remarqué, est quand je ramène mon tableau de données depuis la méthode SAX et je les mets dans une hashMap, les valeurs avec la meme clé (attributs) s'écrasent.

    Bout de mon Fichier XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Locedul redemption="4,138.77" basis="3" totalA="21,435.66" sDate="01/01/2010"/>
    <Locedul redemption="7,823.64" basis="2" totalA="17,243.34" sDate="01/01/2010"/>
    Voilà ce que j'ai essayé de faire mais j'arrivais pas :

    Classe SimpleContentHandler:
    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
    private static List listeObjectBaliseOuverteName = new ArrayList();
    private static List listeObjectBaliseOuverteValue = new ArrayList(); 
    public void startElement(String nameSpaceURI, String localName, String rawName, Attributes attributs) throws SAXException {
      System.out.println("Ouverture de la balise : " + localName);
    
      if ( ! "".equals(nameSpaceURI)) { // espace de nommage particulier
                            //System.out.println("  appartenant a l'espace de nom : "  + nameSpaceURI);
                    }
    
                    System.out.println("  Attributs de la balise : ");
                   
                    for (int index = 0; index < attributs.getLength(); index++) { // on parcourt la liste des attributs
                       System.out.println("     - " +  attributs.getLocalName(index) + " = " + attributs.getValue(index));
                        
                        //varAtt.put(attributs.getLocalName(index), attributs.getValue(index));
                        tableAttr[indx]=attributs.getLocalName(index);
                        tableValue[indx]=attributs.getValue(index);
                        indx++;
                    }
                    listeObjectBaliseOuverteName.add(tableAttr);
                    listeObjectBaliseOuverteValue.add(tableValue);
            }
    Donc j'ai ajouté une liste pour pouvoir rendre chaque balise sous forme d'objet pour pouvoir le traiter seul (une balise ne contient pas des attributs répétés)

    Donc je fais ça dans mon Bean mais je sais pas quoi faire pour récupérer les attributs même ceux qui sont répétés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    List aa = SimpleContentHandler.getListeObjectBaliseOuverteName();
    List bb = SimpleContentHandler.getListeObjectBaliseOuverteValue();
     
    for (Iterator iter = aa.iterator(); iter.hasNext();)
    		      {
    			//Donc ici je ne sais vraiment pas quoi faire :\
    		       }

    Si vous n'avez pas compris un point vous me le dites ,j'ai vraiment besoin d'une solution pas obligé la mienne, pour la MultiHashMap c'est vraiment pas ce que je cherche.Merci

  2. #2
    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 Nirspote Voir le message
    pour la MultiHashMap c'est vraiment pas ce que je cherche.Merci
    Ça, je n'ai pas compris. Parce que tout le reste du message dit que c'est précisément une MultiHashMap que tu veux.
    Ou alors, stocker tes éléments dans une List, en gros une représentation objet 100% équivalente au contenu du XML.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    c'est un peu le metling pot dans tes explications, mais si tu cherche à stocker plusieurs valeur pour une clé, il faut une Map de type

    Map<String,List<String>>

    et les insertion sont un chouilla plus compliquée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void add(String key, String value){
       if (!map.containsKey(key))
          map.put(key,new ArrayList<String>());
       map.get(key).add(value);
    }
    Mais normalement, les attributs sur une balise xml, c'est unique

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Par défaut
    Salut et merci de m'avoir répondu aussi vite.

    Pour la MultiHashMap , elle nécessite que je rends tous mes attributs en List alors que j'en ai des dizaines, après je dois récupérer les attributs de ces listes et les caster selon le type de mes attributs, je trouve que cette méthode vas jamais finir.. et surtout longue.

    Pour la HashMap<String,List> ,
    quand je fais map.get(key).add(value); je trouve pas la méthode add() pour get(key);

    Edit: je l'ai casté en List ça a passé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((List) varAtt.get(key)).add(value);
    Merci

    je vous tiendrai au courant si je rencontre d'éventuel erreur dans ce meme programme merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conteneur avec plusieurs clés pour une valeur
    Par insomniak dans le forum C++
    Réponses: 6
    Dernier message: 15/10/2006, 18h18
  2. insertion dans table avec plusieurs clés étrangères
    Par philippe281281 dans le forum Administration
    Réponses: 2
    Dernier message: 14/06/2006, 18h35
  3. [hibernate] relation one-to-many avec plusieurs clés
    Par seb_fou dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/03/2006, 14h47
  4. Creation d'une table avec plusieurs clés
    Par mic79 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/06/2005, 11h17
  5. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 17h24

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