On Mon, Jan 26 2015, enrico franchi wrote:
> 2015-01-26 8:48 GMT+00:00 Marco Giusti <marco.giu...@posteo.de>:
> 
> >
> > La funzione è richiamata dal parser stesso e quindi non puoi utilizzare
> > il valore returnato. Usare delle variabili globali non è vietato ma puoi
> > utilizzare altre soluzioni, per esempio i metodi di una funzione.
> > Infatti questi sono già legati all'oggetto stesso e quindi hanno già uno
> > stato comune. Ti allego un esempio, abbastanza ridicolo a dire il vero.
> >
> 
> 
> Dico ma.... nell'essempio passano un *oggetto* cui hanno appiccicato delle
> funzioni.
> Ora perche' farsi male ad aggiungere stato alle funzioni appiccicate
> all'oggetto quando si potrebbe semplicemente
> passare un oggetto vero e proprio con il suo stato e nessun obrobrio?

Non colgo il significato. Comunque l'esempio voleva solo imitare le api
di expat e fornirgli un'idea generale della soluzione, non mi sembra che
expat fornisca un modo alternativo per gestire gli eventi.

Certo si può rendere l'api di expat molto più elegante di quanto non lo
è ora, ma non conosco le esigenze di Gollum. Per esempio a me piace
molto la programmazione per interfacce ma mi sembra un po' esagerato
tutto questo per uno scriptino.

m.
from __future__ import print_function
import zope.interface
import xml.parsers.expat


class IHandler(zope.interface.Interface):

    def XmlDeclHandler(version, encoding, standalone):
        pass

    def StartDoctypeDeclHandler(doctypeName, systemId, publicId,
                                has_internal_subset):
        pass

    # ...

    def StartElementHandler(name, attributes):
        pass

    def EndElementHandler(name):
        pass

    def CharacterDataHandler(data):
        pass


def parse(data, ihandler, isfinal=False):
    parser = xml.parsers.expat.ParserCreate()
    default = lambda *arguments: None
    for name in IHandler:
        setattr(parser, name, getattr(ihandler, name, default))
    parser.Parse(data, isfinal)


class MyHandler:

    def StartElementHandler(self, name, attrs):
        print("Start element:", name, attrs)

    def EndElementHandler(self, name):
        print("End element:", name)

    def CharacterDataHandler(self, data):
        print("Character data:", repr(data))


data = """<?xml version="1.0"?>
<parent id="top"><child1 name="paul">Text goes here</child1>
<child2 name="fred">More text</child2>
</parent>"""
parse(data, MyHandler())
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a