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

Python Discussion :

erreur sur la valeur d'un élément SAX pour parser un XML


Sujet :

Python

  1. #1
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut erreur sur la valeur d'un élément SAX pour parser un XML
    Bonjour,

    je parse un fichier XML avec SAX. Je recupère bien toutes les valeurs des éléments que je veux sauf pour un élément.
    Je précise que le XML fait 95Mo

    j'ai une erreur assez étrange avec SAX sur un seul élément (SAX ni python ne renvoie aucune erreur mais la valeur fournie par SAX pour l'élément n'est pas complète).

    En gros je recupère la valeur de plusieurs éléments à tour de role avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def characters(self,ch):
            self.valeur=ch
    tout se passe bien pendant plusieurs milliers d'enregistrements et puis au bout d'un moment je n'ai plus que des morceaux de la chaine de caractères et cela pour un seul élément, tous les autres continuent de renvoyer des valeurs correctes

    Normalement la valeur de l'élément en cause est "original-t" ou vide et parfois j'obtiens "inal-t" ou "nal-t" ou un autre morceau de la chaine.

    j'avoue que je ne comprends pas pourquoi, surtout que cela marche pour plusieurs autres milliers d'enregistrements.

    Quelqu'un aurait une piste?
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par katanaenmousse Voir le message
    Quelqu'un aurait une piste?
    Si votre code est bien écrit, il faut plutôt regarder côté "données" i.e. ce qu'il y a de particulier à l'enregistrement qui cause problème.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    J'ai trouvé après avoir un peu analyser ce que me renvoyait SAX.

    Sax renvoie la valeur d'un élément mais pas forcément en une seule chaine de caracteres ni en une seule fois.

    Il faut donc modifier le code comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def characters(self,ch):
            # SAX renvoie ici la valeur d'un élément (pas forcément complet) 
            self._charBuffer.append(ch.encode("utf-8"))    
     
            #self.valeur=(ch.encode("utf-8"))  cette ligne est fausse la valeurd'un élément peut etre renvoyé en plusieurs ch successifs
    Pour avoir la valeur complète on concatene les renvois successif et on passe par une methode: j ai choisi : valeur_elem() pour l'obtenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def valeur_elem(self):
            s = ''.join(self._charBuffer)
            self._charBuffer = []
            return s
    pour afficher la valeur je n'ai plus qu'à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print self.valeur_elem()
    voila
    merci pour votre aide
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

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

Discussions similaires

  1. [XL-2013] MACRO calcul de rentabilité - erreur sur retour valeur
    Par saboun.tebah dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/09/2014, 19h19
  2. [XL-2010] Erreur sur récupération valeur TextBox
    Par Kaera dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/12/2011, 11h36
  3. Réponses: 4
    Dernier message: 27/06/2011, 09h43
  4. erreur sur la valeur ESP
    Par salseropom dans le forum C++
    Réponses: 5
    Dernier message: 28/05/2010, 18h14
  5. [XML] [SAX] Comment Parser du XML
    Par Masterlud dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 17/04/2007, 20h26

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