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 :

Gestion des balises optionnelles [SAX]


Sujet :

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

  1. #1
    Membre chevronné Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Par défaut Gestion des balises optionnelles
    Bonjour tous le monde,

    Je debute avec SAX, j'arrive bien a gerer mes cas standard mais j'ai quelques soucis lors de balises optionnelles
    exemple avec la balise b :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <a>
      <b id="1" param_optionnel="1"/>
      <b id="2"/>
    </a>
    Comment on fait pour notre constructeur, il faut en déclaré plusieurs ?
    y a t-il un moyen de detecter si getAtttribut("param_optionnel") est vide ?

  2. #2
    Membre chevronné Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Par défaut
    Voila ce que j'ai fait.

    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
    public class ApplicationHandler  extends DefaultHandler
    {
    private boolean inListMembre, inMember;
    private Member member;
    private ListMembre listMembre;
     
     
    	  // -- détection d'ouverture de balise --
    	  public void startElement( String uri, String localName, String qName, Attributes attributes) throws SAXException
    	  {
    	    if(qName.equalsIgnoreCase("member")) {
    	    	member=new Member(attributes.getValue("ref"));
    	    	/*mise à jour des paramètres optionnels*/
    	    	member.setAttendance(attributes.getValue("attendance"));
    	    	inMember=true;	    	
    	    }
    	    else {
    	      // -- erreur, on peut lever une exception --
    	      throw new SAXException("unknown tag " + qName);	
    	    }
    	  }
     
    	  // -- détection fin de balise --
    	  public void endElement( String uri, String localName, String qName ) throws SAXException
    	  {
    		if(qName.equalsIgnoreCase("list-membres")) {			    	
    		    	inListMembre=false;	    	
    		    }
    		else if(qName.equalsIgnoreCase("member")) {	
    			this.listMembre.getMemberList().add(this.member);
    		    	this.member=null;
    		    	inMember=false;	    	
    		    }
    	    else {
    	      // -- erreur, on peut lever une exception --
    	      throw new SAXException("unknown tag " + qName);
    	    }          	
    	  }
     
    /*...le reste des methodes necessaires*/
    }
    Déclaration de ma classe Member :
    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
     
    package monpackage;
     
    public class Member {
     
    	private String ref;
    	private String attendance=null;
     
    	public String getAttendance() {
    		return attendance;
    	}
     
    	public void setAttendance(String attendance) {
    		this.attendance = attendance;
    	}
     
    	public String getRef() {
    		return ref;
    	}
     
    	public void setRef(String ref) {
    		this.ref = ref;
    	}
     
    	public Member(String ref) {
    		super();
    		// TODO Auto-generated constructor stub
    		this.ref = ref;
    	}	
     
    	public String toString() {
    		// TODO Auto-generated method stub
    		String resu="";
     
    		resu+="ref: " +ref+" ";
    		resu+=(this.attendance==null?"":"attendance: " +attendance+" ");
    		resu+="\n";
     
    		return resu;		
    	}
    }
    En gros, ca fonctionne mais je ne teste pas si mon attribut est donné ou non lors du parse du fichier.

    J'ai l'impression qu'il doit y avoir plus efficace mais je n'ai pas trouvé d'exemple sur le net ayant des paramètres et des balises non obligatoire...

    Est ce que je suis dans la bonne direction ?

  3. #3
    Membre éprouvé Avatar de jerome.petit
    Inscrit en
    Novembre 2002
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 78
    Par défaut
    Tu peux, par exemple, écrire un constructeur prenant en paramètres les différents attributs (obligatoires et optionnels),
    et tu instancies ton objet en faisant un get de tous les paramètres : ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    member=new Member(attributes.getValue("ref"), attributes.getValue("attendance") /*etc, etc ...*/);
    ce sera un peu plus efficace mais pas beaucoup, juste peut être un peu plus lisible ?

    Sinon si tu as beaucoup d'attributs optionnels possibles, tu peux parcourir la liste des attributs avec un itérateur, et affecter les champs de ton objet au fur et à mesure, soit en testant le nom, soit en utilisant l'API Reflect pour affecter directement le champ à partir du nom.

    Voilà, à toi d'essayer et de comparer, tu peux utiliser un profiler pour mesurer l'impact en performances sur ton code (si c'est un point important)

    A+

    Jerome

  4. #4
    Membre chevronné Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Par défaut
    C'est bon j'ai gardé ma solution c'est juste que "architecturellement" je trouvais ca bancal mais ce'st vrai qu'a moins de créer des Objets hérités, j'aurai toujours des paramètre optionnels a null...

    enfin merci

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

Discussions similaires

  1. Gestion des sauts de lignes et balises <ul>
    Par fpouget dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2009, 22h37
  2. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  3. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  4. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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