[Python] Come estrapolare gli attributi da un file xml.

Marco Giusti marco.giusti a posteo.de
Lun 26 Gen 2015 09:48:00 CET


On Mon, Jan 26 2015, Gollum1 wrote:
> Il 26 gennaio 2015 08:08, Gollum1 <gollum1.smeagol1 a gmail.com> ha scritto:
> > Giorno Lista,
> >
> > oggi sono arrivato presto al lavoro, e visto che nessuno rompe, ho
> > ripreso in mano il mio programmino fermo da parecchio...
> >
> > attraverso il modulo requests riesco ad ottenere una stringa
> > contenente l'XML con tutti i parametri dell'utente loggato alla pagina
> > chiamata da requests.
> >
> > sto usando xml.parsers.expat per analizzarla, e vorrei fare in modo
> > che gli attributi che trovo per i vari tag xml vengano restituiti come
> > dizionario {nome_tag: attributo_uri}
> >
> > ho usato questo codice di esempio:
> > https://docs.python.org/3.4/library/pyexpat.html#example
> >
> > e fino a che nelle prove stampo i tag e gli attributi, tutto va bene,
> > ma come faccio a fare il return di una voce di dizionario?
> >
> > pensavo di mettere:
> >
> >     def start_element(name, attrs):
> >          if 'uri' in attrs.keys():
> >             return{name: attrs['uri']}
> >
> > ma chi è il chiamante effettivo, visto che in realtà è come se io
> > avessi inettato la mia funzione all'interna della classe del parser?
> >
> > Byez
> > --
> > Gollum1 - http://www.gollumone.it
> > Tesssssoro, dov'é il mio tessssoro...
> 
> 
> naturalmente se uso una variabile esternda al def, la cosa funziona,
> 
> urls = dict()
> 
> def start_element(name, attrs):
>     if 'uri' in attrs.keys():
>         urls[name] = attrs['uri']
> 
> 
> personalmente però ho sempre cercato di evitare di usare delle
> variabili "globali" all'interno di definizioni di funzioni...
> 
> se lo faccio solitamente è perché sono comunque all'interno di una
> classe, ma in questo caso non ho necessità di refernziare una nuova
> classe solo per l'analisi di questo file xml, una volta ottenuto
> questi uri non me ne faccio più nulla.
> 
> mi sto facendo troppe pippe per nulla?

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.

m.

-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        obj_parser.py
Tipo:        text/x-python
Dimensione:  2244 bytes
Descrizione: non disponibile
URL:         <http://lists.python.it/pipermail/python/attachments/20150126/b381df49/attachment.py>


Maggiori informazioni sulla lista Python