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 :

Problème d'affichage de données


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de menoulette
    Inscrit en
    Août 2009
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 320
    Par défaut Problème d'affichage de données
    Bonjour à vous tous je possède un document nommé (Exercice.xml) et je souhaite afficher la classe des étudiants dont le prénom est Laurent et le nom est CynO. Son code java est le suivant
    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
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
     
     
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    import java.util.Iterator;
    import org.jdom2.*;
    import org.jdom2.filter.*;
     
    import org.jdom2.input.SAXBuilder;
     
    public class Jdom2 {
     
    	static org.jdom2.Document document;
    	static Element racine ;
     
    	static void afficheAll(){
    		//on crée une liste contenant tous les elementsetudiant 
     
    		List listEtudiant = racine.getChildren("etudiant");
    		//on crée un iterator sur notre liste
    		Iterator i = listEtudiant.iterator();
    		while(i.hasNext()){
    			//on crée l'elemnt courant
    			Element courant=(Element)i.next();
    			System.out.println(courant.getChild("nom").getText());
     
    		}
    	}
     
    	static void afficheFiltre()
    	{
    	   //On crée un nouveau filtre
    	   Filter filtre = new Filter()
    	   {
    	      //On défini 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;
     
    	         //On crée deux variables qui vont nous permettre de vérifier
    	         //les conditions de nom et de prenom
    	         int verifNom = 0;
    	         int verifPrenom = 0;
     
    	         //2 ème vérification: on vérifie que le nom est bien "CynO"
    	         if(element.getChild("nom").getTextTrim().equals("CynO"))
    	         {
    	            verifNom = 1;
    	         }
    	         //3 ème vérification: on vérifie que CynO possède un prenom "Laurent"
    	         //On commence par vérifier que la personne possède un prenom,
    	         //en effet notre fichier XML possède des étudiants sans prénom !
    	         Element prenoms = element.getChild("prenoms");
    	         if(prenoms == null){return false;}
     
    	         //On constitue une list avec tous les prenom
    	         List listprenom = prenoms.getChildren("prenom");
     
    	         //On effectue la vérification en parcourant notre liste de prenom
    	         //(voir: 3.1. Parcourir une arborescence)
    	         Iterator i = listprenom.iterator();
    	         while(i.hasNext())
    	         {
    	            Element courant = (Element)i.next();
    	            if(courant.getText().equals("Laurent"))
    	            {
    	               verifPrenom = 1;
    	            }
    	         }
     
    	         //Si nos conditions sont remplies on retourne true, false sinon
    	         if(verifNom == 1 && verifPrenom == 1)
    	         {
    	            return true;
    	         }
    	         return false;
    	      }
     
    		@Override
    		public Filter and(Filter arg0) {
    			// TODO Auto-generated method stub
    			return null;
    		}
     
    		@Override
    		public List filter(List arg0) {
    			// TODO Auto-generated method stub
    			return null;
    		}
     
    		@Override
    		public Object filter(Object arg0) {
    			// TODO Auto-generated method stub
    			return null;
    		}
     
    		@Override
    		public Filter negate() {
    			// TODO Auto-generated method stub
    			return null;
    		}
     
    		@Override
    		public Filter or(Filter arg0) {
    			// TODO Auto-generated method stub
    			return null;
    		}
     
    		@Override
    		public Filter refine(Filter arg0) {
    			// TODO Auto-generated method stub
    			return null;
    		}
    	   };//Fin du filtre
     
    	   //getContent va utiliser notre filtre pour créer une liste d'étudiants répondant
    	   //à nos critères.
    	   List resultat = racine.getContent(filtre);
    	   //On affiche enfin l'attribut classe de tous les éléments de notre list
    	   Iterator i = resultat.iterator();
    	   while(i.hasNext())
    	   {
    	      Element courant = (Element)i.next();
    	      System.out.println(courant.getAttributeValue("classe"));
    	   }
    	}
     
    	public static void main(String [] args){
    		//on crée une instance de  SAXBuilder
    		SAXBuilder sxb = new SAXBuilder();
    		try {
    			document=sxb.build(new File("Exercice1.xml"));
    		} catch (JDOMException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		racine=document.getRootElement();
    	    //afficheAll();
    		afficheFiltre();
    	}
     
     
     
     
     
    }
    le document XMl et le suivant



    Code xml : 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
     
     
    <?xml version="1.0" encoding="UTF-8"?>
    <personnes>
       <etudiant classe="P2">
          <nom>CynO</nom>
          <prenoms>
             <prenom>Nicolas</prenom>
             <prenom>Laurent</prenom>
          </prenoms>
       </etudiant>
       <etudiant classe="P1">
          <nom>Superwoman</nom>
       </etudiant>
       <etudiant classe="P1">
          <nom>Don Corleone</nom>
       </etudiant>
    </personnes>
    le problème c'est que je n'ai aucun résultat alors que je trouve que le code java suit une logique correcte ?
    Merci d'avance pour vos réponses

    Cordialement

  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
    Ce n'est pas comme ça qu'on fait des filtres. Notamment, les méthodes filter() ne peuvent pas renvoyer null (sauf pour un filtre qui n'accepte rien.)

    - On n'implémente jamais Filter. D'abord on regarde si Filters ne peut pas nous fournir le filtre voulu. Là ce n'est pas le cas. Dans ce cas on étend une des classes disponibles.
    - Pour filtrer sur des éléments, on étend ElementFilter.
    - C'est la méthode filter(Object) qu'il faut redéfinir. matches(Object) et filter(List) ne font que s'en servir, et ElementFilter les implémente déjà.


    - De toute façon, ce serait bien plus simple en utilisant XPath avec prédicat qu'en utilisant un Filter :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    /*/etudiant[normalize-space(nom) = 'Cyno' and prenoms/prenom[normalize-space(.) = 'Laurent']]
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [MySQL] Problème d'affichage de données
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/08/2008, 23h06
  2. [MySQL] Problème d'affichage des données!
    Par ghyosmik dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/09/2006, 15h43
  3. Problème d'affichage de données avec crystal report
    Par napegadie dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 07/12/2005, 15h45
  4. problème d'affichage de données
    Par geof_leouf dans le forum Access
    Réponses: 6
    Dernier message: 11/10/2005, 09h23
  5. [JTable] Problème d'affichage des données
    Par ddams dans le forum Composants
    Réponses: 2
    Dernier message: 15/09/2004, 17h07

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