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:
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:
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:
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:
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:
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:
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