Problème de filtrage selon la valeur d'un attribut
j'ai un fichier xml dont la forme générale est la suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <texte>
<phrase>
<mot type="word">
<nature val="comm">ali</nature>
<nature val="ident"></nature>
</mot>
<mot type="ident">
<nature val="comm">nom</nature>
<nature val="ident"></nature>
</mot>
<mot type="word">
<nature val="comm">amir</nature>
<nature val="ident"></nature>
</mot>
<mot type="ident">
<nature val="comm">nom</nature>
<nature val="ident"></nature>
</mot>
</phrase>
<phrase>
.
.
.</phrase>
</texte |
je voudrais filtrer ce fichier xml selon l'attribut type de l'Element mot.C'est-à-dire que le filtre que je voudrais créer, permettra de ne prendre en compte que les elements mot dont le type est ident . le code que j'ai utilisé est le suivant:
Code:
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| static void afficheFiltre(){
//On crée un nouveau filtre
Filter filtre = new Filter()
{
/**
*
*/
private static final long serialVersionUID = 1L;
//On définit les propriétés du filtre à l'aide de la méthode matches
public boolean matches(Object ob)
{
//1 ère vérification : on vérifie que les objets qui seront filtrés sont bien des Elements
if(!(ob instanceof Element))
{return false;}
//On crée alors un Element sur lequel on va faire les vérifications suivantes.
Element element = (Element)ob;
//2 ème vérification: on vérifie que le type est bien "ident"
int verifType = 0;
List listMot= element.getChildren("mot");
Iterator i =listMot.iterator();
while (i.hasNext())
{
Element courant= (Element)i.next();
if (courant.getAttributeValue("type").equals("ident"))
{verifType= 1;}else {verifType=0;}
}
//verification des conditions
if (verifType == 1)
{
return true;
}
else
{return false;}
}
}; // fin filtre
List resultat= racine.getContent(filtre);
Iterator j= resultat.iterator();
while(j.hasNext())
{
Element courant1 = (Element) j.next();
List listM=courant1.getChildren("mot");
Iterator k= listM.iterator();
while(k.hasNext())
{
Element cour= (Element)k.next();
System.out.println(cour.getChildText("nature"));
}
}
} |
Ce que j'ai comme résultat:
Or moi, je voudrais avoir
8O je ne sais pas quoi faire.pouvez-vous m'aider