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 xml.sax et la méthode "feed"


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut parser un fichier xml avec xml.sax et la méthode "feed"
    Bonjour,

    J'essaie de mettre en place un parser xml en python.

    J'y arrive avec un code de ce genre:

    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
    from xml.sax.handler import ContentHandler
    import xml.sax
    import sys
     
    class compteurElements(ContentHandler):
    def __init__(self):
    self.elem={}
    def startElement(self,name,attr):
    if not self.elem.has_key(name):
    self.elem= 0
    self.elem+= 1
    def characters(self,ch):
    print ch
    def endElement (self, name):
    print name + ":" + str(self.elem)
     
    parser = xml.sax.make_parser()
    handler = compteurElements()
    parser.setContentHandler(handler)
    parser.parse(sys.argv[1])
    Maintenant quand j'essaie d'utiliser une classe de type xml.sax.xmlreader.IncrementalParser pour utiliser la méthode feed. Je n'y arrive plus. Je fournie à la méthode feed une string qui correspond à une ligne d'un fichier xml mais ça ne fonctionne pas.

    Savez-vous comment réaliser le parse avec une méthode feed ?

    D'avance merci.

    louisonb

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bon, j'ai essyé qq chose de mieux mais autre pb:

    J'utilise: xml.sax.parseString

    Voici mon 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
    16
    17
    18
    19
    20
    21
    22
     
    from xml.sax.handler import ContentHandler
    import xml.sax
    import sys
     
    class compteurElements(ContentHandler):
        def __init__(self):
            self.isFinal = 0
            self.elem={}
        def startElement(self,name,attr):
            if not self.elem.has_key(name):
                self.elem[name] = 0
            self.elem[name] += 1
            print name
     
        def characters(self,ch):
            print ch
        def endElement (self, name):
            print name + ":" + str(self.elem[name])
     
    handler = compteurElements()
    xml.sax.parseString("<toto>",handler)
    Qui me retourne:
    toto
    Traceback (most recent call last):
    File "essai.py", line 21, in <module>
    xml.sax.parseString("<toto>",handler)
    File "/opt/swe/tools/ext/gnu/python-2.5.1/lib/python2.5/xml/sax/__init__.py", line 49, in parseString
    parser.parse(inpsrc)
    File "/opt/swe/tools/ext/gnu/python-2.5.1/lib/python2.5/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
    File "/opt/swe/tools/ext/gnu/python-2.5.1/lib/python2.5/xml/sax/xmlreader.py", line 125, in parse
    self.close()
    File "/opt/swe/tools/ext/gnu/python-2.5.1/lib/python2.5/xml/sax/expatreader.py", line 217, in close
    self.feed("", isFinal = 1)
    File "/opt/swe/tools/ext/gnu/python-2.5.1/lib/python2.5/xml/sax/expatreader.py", line 211, in feed
    self._err_handler.fatalError(exc)
    File "/opt/swe/tools/ext/gnu/python-2.5.1/lib/python2.5/xml/sax/handler.py", line 38, in fatalError
    raise exception
    xml.sax._exceptions.SAXParseException: <unknown>:1:6: no element found


    Il se trouve que quand je remplace la ligne:

    xml.sax.parseString("<toto>",handler)

    par

    xml.sax.parseString("<toto></toto>",handler)

    c'est ok.

    Sauf que je parse un fichier ligne par ligne qui peut avoir cette allure:

    <debut>
    <tag1>1</tag1>
    </debut>

    et là il n'est pas content ???

Discussions similaires

  1. parser un fichier xml avec xml.sax
    Par pi-2r dans le forum Général Python
    Réponses: 2
    Dernier message: 07/08/2014, 16h06
  2. impossible de parser le fichier hibernate.cfg.xml
    Par paolo2002 dans le forum Wildfly/JBoss
    Réponses: 9
    Dernier message: 30/05/2007, 17h39
  3. Réponses: 2
    Dernier message: 01/01/2007, 13h04
  4. 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