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 :

Parser un fichier XML avec accent


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut Parser un fichier XML avec accent
    Bonjour,

    J'ai un fichier XML contenant des accents dans les balises (c'est une norme que je ne peux pas modifier).
    J'utilise le module xml.etree.ElementTree pour parser le fichier. Mon programme python est encodé en utf-8 et fonctionne. Par contre je préfèrerai que le fichier soit encodé en iso-8859-1, notamment lors du traitement des données (enregistrement dans une table par exemple, la base de données est en iso...).
    J'ai essayé lors du parsage du fichier faire un encode/decode du fichier XML, mais ça ne fonctionne pas. J'ai directement une UnicodeDecodeError. C'est bien la fonction etree.parse qui pose problème, si je print le fichier ça fonctionne...
    Est-ce que quelqu'un aurait une idée pour contourner ce problème ?

    Merci.
    Quand tu regardes vers le Nord, t'as le "Sud au cul" ...

  2. #2
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Ça pourrait être bien de nous donner ton code actuel…

    À première vue, etree est parfaitement capable de gérer les encodages. Si parse() ne marche pas, lis ton xml dans une str et utilise fromstring, non*?

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    Salut,
    Désolé, voilà le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       def readXml(self, fichier):
          self.doc = etree.parse(fichier)
     
    # fichier = chemin + nom_fichier
       def lireFichier(self, fichier):
          self.fichier = fichier
          self.readXml(self.fichier)
    fromstring est intégré dans etree ?
    Quand tu regardes vers le Nord, t'as le "Sud au cul" ...

  4. #4
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Du coup, tu peux essayer un truc comme ça*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def readXml(self, fichier):
        with open(ficher) as f:
             xmlstr = f.read(encoding="utf8")
        self.doc = etree.fromstring(xmlstr)
     
    # fichier = chemin + nom_fichier
    def lireFichier(self, fichier):
        self.fichier = fichier
        self.readXml(self.fichier)

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    Merci,
    j'ai essayé, mais j'obtiens une erreur
    TypeError: read() takes no keyword arguments

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlstr = f.read().encode("utf-8")
    mais j'obtiens l'erreur UnicodeDecodeError...
    Quand tu regardes vers le Nord, t'as le "Sud au cul" ...

  6. #6
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Miaou… Peut-être eut-il été de bon goût de nous préciser la version de votre python*!?

    Ceci dit, je pense que decode() serait plus approprié que encode()…

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 62
    Points
    62
    Par défaut
    La version de python est la 2.6.5.

    En fait j'avais bien mis decode, je me suis loupé en recopiant... à force de décoder et d'encoder je commence à plus m'y retrouver... en tout cas j'ai bien toujours l'erreur :
    UnicodeDecodeError: 'utf8' codec can't decode bytes in position 76-78: invalid data
    Quand tu regardes vers le Nord, t'as le "Sud au cul" ...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 54
    Points
    54
    Par défaut
    le open() de python 2.6 doit ouvrir le fichier en mode texte/ASCII. Essaye open('toto.xml','wb') et de le decoder en utf-8

Discussions similaires

  1. [DOM4J] Problème pour "parser" un fichier XML avec accents
    Par mlny84 dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 26/11/2007, 19h06
  2. parser un fichier xml avec dom
    Par cilies38 dans le forum Modules
    Réponses: 2
    Dernier message: 04/03/2007, 21h12
  3. [XML] [EXPAT] Parser un fichier xml avec php
    Par Dargos dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 05/04/2006, 12h25
  4. [XML] Comment parser ce fichier XML avec java !
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/03/2006, 12h56
  5. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32

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