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 :

Ignorer des balises [SAX]


Sujet :

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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut Ignorer des balises
    Bonsoir à tous,

    J'ai suivi le tutoriel sur SAX. J'ai réussi à faire en quelque sorte mon parser... mais je trouve ma méthode un peu "bourrin".
    En effet, mon parser contient toutes les balises, même celle dont je n'ai pas besoin, est-ce obligatoire ?

    Si je prends l'annuaire XML de cette page : http://java.developpez.com/faq/xml/?page=sax

    Puis-je rajouter une balise comme ci-dessous sans avoir à la déclarer dans mon parser...je voudrais qu'il l'ignore, comme si elle n'était pas présente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
               <annuaire>
                        <personne id="0">
                        <nom>nom0</nom>
                        <prenom>prenom0</prenom>
                        <adresse>adresse0</adresse>
                        <tel>0026421056</tel>
                        </personne>
                        <personne id="1">
                        <nom>nom1</nom>
                        <prenom>prenom1</prenom>
                        <adresse>adresse1</adresse>
                        <tel></tel>
                        </personne>
                        </annuaire>
    Pour tout vous dire, je souhaiterai parser cette page : http://www.google.fr/ig/api?weather=Paris,France

    Pour commencer, récupérer les éléments suivants présents dans les balises <current_conditions> : condition, temp_c, humidity

    Merci beaucoup d'avance.

    Bonne nuit

  2. #2
    Rédacteur/Modérateur
    Avatar de regis1512
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2008
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 264
    Par défaut
    Bonjour,

    Je ne suis pas sur de comprendre ta question.

    Mais si tu ne testes pas une balise dans le endElement par exemple,
    il n'y aura simplement pas l'opération sur cette balise.
    Ca ne remet en cause (ou ne devrait pas remettre en cause selon ton implementation)
    le parsing des autres balises (celles qui sont testées et sur lesquelles tu effectues une opération)

    Bon courage.
    Pourquoi cet avatar ? Parce que j'aime bien le tableau "Le Fils de l'homme" de Magritte.
    Mes contributions sur developpez.com

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut
    Merci de ta réponse.

    En gros, comment parser avec SAX l'exemple que j'ai donné sans avoir à mentionner la balise <tel>.
    L'exemple du tutorial me renvoie : la balise tel est inconnue.
    Ce qui est logique vu le code du programme, mais je n'arrive pas à le modifier correctement.

    Lavrenti.

  4. #4
    Rédacteur/Modérateur
    Avatar de regis1512
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2008
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 264
    Par défaut
    Il faut modifier dans le startElement :

    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
     
        //détection d'ouverture de balise
        public void startElement(String uri, String localName,
                String qName, Attributes attributes) throws SAXException{
     
            if(qName.equals("annuaire")){
                annuaire = new LinkedList<Personne>();
                inAnnuaire = true;
            }else if(qName.equals("personne")){
                personne = new Personne();
                try{
                    int id = Integer.parseInt(attributes.getValue("id"));
                    personne.setId(id);
                }catch(Exception e){
                    //erreur, le contenu de id n'est pas un entier
                    throw new SAXException(e);
                }
                inPersonne = true;
            }else {
                buffer = new StringBuffer();
                if(qName.equals("nom")){
                    inNom = true;
                }else if(qName.equals("prenom")){
                    inPrenom = true;
                }else if(qName.equals("adresse")){
                    inAdresse = true;
                }else if(qName.equals("tel")){
                    inTel = true;
                }else{
                    //erreur, on peut lever une exception
                    throw new SAXException("Balise "+qName+" inconnue.");
                }
            }
        }
    en rajoutant un controle sur "tel", ce qui évite de passer dans le sinon de l'exception.

    Et suivre le même principe pour le endElement.

    Bon courage.
    Pourquoi cet avatar ? Parce que j'aime bien le tableau "Le Fils de l'homme" de Magritte.
    Mes contributions sur developpez.com

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut
    Finalement, j'ai trouvé le moyen de les ignorer. Sans avoir à mettre un autre "else if".
    Maintenant, un autre problème se présente.
    J'ai le code suivant à parser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <temp_f data="55"/>
    <temp_c data="13"/>
    <humidity data="Humidité : 54%"/>
    <icon data="/images/weather/sunny.gif"/>
    <wind_condition data="Vent : N à 10 km/h"/>
    Jusqu'à la balise temp_c, tout va bien.
    Ensuite : PROBLèME.

    Le '%' contenu dans le data de la balise <humidity> va empêcher le parsing (Erreur I/O). Si je retire ce %, le problème vient ensuite avec '/' dans <icon> et <wind_condition>.
    Je n'ai aucune idée de comment résoudre ce problème de caractères spéciaux.

    Une idée ?

    Merci en tout cas, j'avance bien et je comprends (là est le plus important).

  6. #6
    Rédacteur/Modérateur
    Avatar de regis1512
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2008
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 264
    Par défaut
    Bonsoir,

    Ca ! ca m'en bouche un coin.
    Je vois pas la tout de suite et mes recherches pour t'aider sont infuctueuses.

    Mais ca doit le faire, un attribut avec un pourcentage ou un chemin ca doit marcher. Y a pas de raison....

    Bon courage.
    Euh... Et bonne nuit...
    Pourquoi cet avatar ? Parce que j'aime bien le tableau "Le Fils de l'homme" de Magritte.
    Mes contributions sur developpez.com

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut
    J'ai trouvé ! Tout con, enfin impossible à deviner pour vous, sans avoir mon XML. C'était l'encodage qui n'était pas bon. J'ai donc remplacé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="UTF-8"?>
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO-8859-1"?>
    ça marche nickel.

    Maintenant, une dernière question, (ou dois-je recréer un sujet ?) :

    Est-ce possible de parser une page disponible sur internet (sans avoir à la télécharger à chaque fois). Si non, comment télécharger une page xml en java ?

    Merci beaucoup regis1512 pour ton aide !

    EDIT : j'arrive à lire la page à distance avec ce code

    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
    URL url = new URL("http://www.google.fr/ig/api?weather=bayeux");
     
                   /* Get a SAXParser from the SAXPArserFactory. */
                   SAXParserFactory spf = SAXParserFactory.newInstance();
                   SAXParser sp = spf.newSAXParser();
     
                   /* Get the XMLReader of the SAXParser we created. */
                   XMLReader xr = sp.getXMLReader();
                   /* Create a new ContentHandler and apply it to the XML-Reader*/
                   MeteoHandler myExampleHandler = new MeteoHandler();
                   xr.setContentHandler(myExampleHandler);
     
                   /* Parse the xml-data from our URL. */
                   xr.parse(new InputSource(url.openStream()));
                   /* Parsing has finished. */
    Mais le parsing bloque au moment ou j'arrive à <humidity> à nouveau à cause des caractères donc à cause de l'encodage choisi. C'est possible de configurer le parseur en UTF-8 ou de lui dire de récupérer la page en ISO ?

    Bonne nuit !

  8. #8
    Rédacteur/Modérateur
    Avatar de regis1512
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2008
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 264
    Par défaut
    Bonjour,

    Il me semble qu'il y a quelque chose a faire au niveau du setProperty du parser.
    Par contre, j'ai pas trouvé la propriété à setter.

    Pour télécharger le xml, tu peux utiliser la librairie HTTPClient de chez Apache.
    Mais je pense que tu peux y arriver sans télécharger.

    Bon courage.
    Pourquoi cet avatar ? Parce que j'aime bien le tableau "Le Fils de l'homme" de Magritte.
    Mes contributions sur developpez.com

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut
    J'ai réussi, je me suis concentré sur les recherches "encoding sax openstream" et j'ai fini par trouver (sur un problème pour Android... la classe).

    Voila la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // On parse depuis l'url renseignée plus haut
    InputSource src = new InputSource(url.openStream());
    src.setEncoding("ISO-8859-1"); //On change l'encodage, UTF-8 pose problème
    xr.parse(src);
    Bon, et bien tout va bien. Je repasserai sans doute pour d'autres choses mais pas pour SAX, je commence à maitrise un tit peu

    Merci encore Regis, je passe le sujet en Résolu.

    A bientôt !

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

Discussions similaires

  1. [Article] Liste des balises et de leurs enfants pour une validation XHTML 1.1
    Par giminik dans le forum Publications (X)HTML et CSS
    Réponses: 12
    Dernier message: 12/02/2018, 15h11
  2. [SAX][DELPHI] ignorer des balises
    Par sillycoder dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 03/10/2006, 11h55
  3. XLS - Nom des balise
    Par lakrimo dans le forum XMLRAD
    Réponses: 2
    Dernier message: 05/02/2004, 11h12
  4. Position des balises H2 ou comment les numéroter
    Par haypo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 12/07/2003, 19h24
  5. Placement des balises avec DTD
    Par Keul125 dans le forum Valider
    Réponses: 4
    Dernier message: 28/05/2003, 12h08

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