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
ici y aucun problème puisque je mets tous les attributs de mon fichier XML dans un tableau.
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++; } }
Dans mon Bean :
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
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 : "+ ); }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 identifier=(String) varAtt.get("identifier"); isin=(String) varAtt.get("isin");
Bout de mon Fichier XML:
Voilà ce que j'ai essayé de faire mais j'arrivais pas :
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"/>
Classe SimpleContentHandler:
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)
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 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
Partager