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 :

Récupération des résultats [SAX]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut Récupération des résultats
    Bonjour,

    Voici ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void startElement(String uri, String localName,String qName, Attributes attribut) throws SAXException{					
    for (int i = 0; i < attribut.getLength(); i++) {
        if(qName.equals("BDDF")&& privacy.equals("true)){
           System.out.println(attribut.getValue("provID"));
        }
    }
    }
    Ma question est: comment récupérer les résultats obtenus (provID) dans un tableau??

    Merci d'avance.

  2. #2
    Membre expérimenté

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Par défaut
    Bonjour,

    Au lieu de faire un println, tu peux stocker tes résultats au fur et à mesure dans un tableau, une ArrayList ou autre conteneur, et le faire retourner à ta méthode startElement au lieu de renvoyer void si tu désire utiliser ton tableau dans une autre méthode ou ailleurs dans ton programme.

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut
    Bonjour, merci pour votre réponse

    Quel est le type que dois je donner à la méthode startElement ?? J’ai essayé "String" mais j’ai obtenu cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    overrides org.xml.sax.helpers.DefaultHandler.startElement
    	- The return type is incompatible with DefaultHandler.startElement(String, String, String, Attributes)
    	- Method breakpoint:ExempleSAX [entry] - startElement(String, String, String, Attributes)

  4. #4
    Membre expérimenté

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Par défaut
    Bonjour,

    Je ne sais pas ce que tu as essayé de faire, mais ce que je proposais c'était ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public String[] startElement(String uri, String localName,String qName, Attributes attribut) throws SAXException{
    String[] provIDs = new String[attribut.getLength()];				
    for (int i = 0; i < attribut.getLength(); i++) {
        if(qName.equals("BDDF")&& privacy.equals("true")){
           provIDs[i] = attribut.getValue("provID"));
        }
    }
    return provIDs;
    }
    Bref, remplacer ton println en stockant dans un tableau au passage.
    Mais ce qui me paraît bizarre c'est que dans ta boucle, tu vas toujours avoir le même résultat puisque ton indice i n'est utilisé nulle part

    Que voulais-tu faire exactement dans cette méthode ?
    Quel est le code associé à l'erreur précédente que tu as eu ?

    Peux-tu donner un exemple de XML que tu as ?
    En extrapolant un peu, j'ai l'impression que c'était plutôt ça que tu voulais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public String[] startElement(String uri, String localName,String qName, Attributes attribut) throws SAXException{
        String provID = "";
        if(qName.equals("BDDF")&& privacy.equals("true")){
            provID = attribut.getValue("provID"));
        }
        String[] provIDs = provID.split(" ");
        return provIDs;
    }
    En effet :
    Citation Envoyé par Javadoc
    If the attribute value is a list of tokens (IDREFS, ENTITIES, or NMTOKENS), the tokens will be concatenated into a single string with each token separated by a single space.
    Si j'ai mal extrapolé, soit un peu plus précis en disant ce que tu as et ce que tu veux

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut
    Bonjour,

    Peux-tu donner un exemple de XML que tu as ?
    voici mon fichier XML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- edited with XMLSpy v2008 sp1 (http://www.altova.com) by info (info) -->
    <BDDFournisseurs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\DOCUME~1\maison\Bureau\BDD\BDDF.xsd">
    	<BDDF provID="prov1" privacy="true">
    		<services nom="Algerie mon amour" type="music" DomainOntology="musicshopOntology"/>
    	</BDDF>
    	<BDDF provID="prov2" privacy="false">
    		<services nom="XML et les bases de données" type="livre" DomainOntology="livreOntology"/>
    	</BDDF>
    	<BDDF provID="prov3" privacy="true">
    		<services nom="Aicha" type="music" DomainOntology="musicshopOntology"/>
    	</BDDF>
    </BDDFournisseurs>
    Que voulais-tu faire exactement dans cette méthode ?
    je veux récupérer tous les "provID" de l'élément "BDDF" et qui ont "privacy=true".

    Quel est le code associé à l'erreur précédente que tu as eu ?
    j'ai écrie ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public String startElement(String uri, String localName,String qName, Attributes attribut) throws SAXException{
    String[] listeF = {};
    String privacy=attribut.getValue("privacy");				
    for (int i = 0; i < attribut.getLength(); i++) {
        if(qName.equals("BDDF")&& privacy.equals("true")){
           listeF[i] = attribut.getValue("provID"));
        }
    }
    return listeF;
    }
    j'ai essayé aussi votre code, mais j'ai obtenu la meme érreur précédente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    overrides org.xml.sax.helpers.DefaultHandler.startElement
    	- The return type is incompatible with DefaultHandler.startElement(String, String, String, Attributes)
    	- Method breakpoint:ExempleSAX [entry] - startElement(String, String, String, Attributes)
    Quelle est la solution à votre avis??

  6. #6
    Membre expérimenté

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Par défaut
    Bonjour,

    Ton message d'erreur vient du fait que tu as déclaré que la méthode renvoyait un String et pas un String[]
    public String startElement
    En plus j'étais un peu à côté de la plaque avec mes réponses précédentes, pardon il a fallut que je me remette dans SAX.

    On ne peut pas faire renvoyer un tableau dans startElement() puisque cette méthode est appelée à chaque début d'élément. Ce que tu veux, c'est avoir un tableau qui contient tous tes provID une fois que tout le fichier XML est parcouru.

    Après avoir testé avec ton fichier XML, voilà un code qui fait ce que tu souhaites (enfin, j'espère) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	final ArrayList listeF = new ArrayList();
     
    	DefaultHandler gestionnaire = new DefaultHandler(){
    		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{
    			if(qName.equals("BDDF") && attributes.getValue("privacy").equals("true")){
    				listeF.add(attributes.getValue("provID"));
    			}
    		}
    	};
    	parseur.parse(fichier, gestionnaire);
     
    	for(int i=0;i<listeF.size();i++){
    	  System.out.println("ma liste : "+listeF.get(i));
    	}
    Voilà, tu as bien tous tes provID qui sont contenus dans listeF. Si tu veux vraiment avoir un tableau au lieu d'une ArrayList tu peux faire un toArray() si tu veux. Là je les ai affiché, mais tu peux les manipuler comme tu le veux.

    J'espère avoir pu t'aider.

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

Discussions similaires

  1. Récupération des résultats des méthodes dans un service WCF
    Par est09 dans le forum Windows Communication Foundation
    Réponses: 16
    Dernier message: 02/04/2009, 16h44
  2. [RegEx] récupération des résultats de preg_match_all
    Par Dharius dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2008, 14h48
  3. [EJBQL] [EJB3] [Junit] Récupération des résultats d'un select
    Par nramariavelo dans le forum Java EE
    Réponses: 1
    Dernier message: 04/10/2006, 16h22
  4. Réponses: 2
    Dernier message: 21/05/2006, 14h02
  5. Réponses: 2
    Dernier message: 29/03/2006, 09h38

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