Forum
>>
Programmazione Python
>>
Files e Directory
>>
Estrarre informazioni da XML
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da dandi98 |
2018-08-27 11:38:54 - Estrarre informazioni da XML
|
Salve a tutti amici del forum ! Gestisco delle API con il modulo requests le quali devono ritornarmi delle informazioni in XML come queste che vi allego in esempio:
<?xml version="1.0"?> <ocs> <meta> <status>failure</status> <statuscode>403</statuscode> <message>Path is already shared with this user</message> <totalitems></totalitems> <itemsperpage></itemsperpage> </meta> <data/> </ocs> ora io vorrei estrarre ad esempio il valore contenuto fra questi due campi <statuscode> </statuscode> come devo fare ? non riesco a trovare una guida su internet che mi faccia un esempio concreto su questo. Spero possiate darmi una mano buona giornata |
|
Scritto da Daniele aka Palmux |
2018-08-27 19:33:32 - Re: Estrarre informazioni da XML
|
Ciao caro, ad occhio c'è un errore in quell'XML, col tag <data>. Ma a parte questo, che libreria usi per accedere all'XML? Ce ne sono diverse e con funzionamenti leggermente differenti.
Ipotizziamo di utilizzare xml.etree.ElementTree, partiamo dal principio del tuo file. >>> import xml.etree.ElementTree as ET >>> xml_root = """<?xml version="1.0"?> <ocs> <data> <meta> <status>failure</status> <statuscode>403</statuscode> <message>Path is already shared with this user</message> <totalitems></totalitems> <itemsperpage></itemsperpage> </meta> </data> </ocs> """Ora potrebbe essere un file, nel nostro esempio si tratta di un xml all'interno del codice. La differenza sarebbe quella di richiamare il file con ET.parse('nome del file').getroot() e sarebbe uguale, nel nostro caso useremo ET.fromstring() perchè, come detto, l'xml è dentro il codice stesso. >>> x = ET.fromstring(xml_root) >>> print(x.tag) #Che succede se stampiamo x? ocs >>> """Oh bene, quindi siamo arrivati al primo elemento del nostro semplice xml, ... ma non fermiamoci, vogliamo arrivare più in profondità.""" >>> for i in x: ... print(i.tag) data >>> for i in x: ... for ii in i: ... print(ii.tag) meta >>> for i in x: ... for ii in i: ... for iii in ii: ... print(iii.tag) status statuscode message totalitems itemsperpage Adesso tutto è chiaro (ma brutto), credo che tu abbia capito come muoverti all'interno del tuo xml, anche se possiamo usare qualche "scorciatoia", chiamiamola così se i permetti. Se scriviamo: >>> print(x[0][0][1].tag) #che cosa credi che stampi? statuscode >>> print(x[0][0][1].text) 403 Ci siamo, siamo arrivati dove volevamo, se non è abbastanza, possiamo farci aiutare da find(). >>> print(x[0][0].find('statuscode').text 403 Questa è solo la punta dell'iceberg, puoi davvero usare altri mille modi di cercare informazioni in un xml, alcune molto più performanti di quelle che ti ho mostrato. Esistono anche altre librerie, mi viene in mente lxml ad esempio, insomma devi solo fare alcune prove e trovare quello che ti piace di più. Cya |
|
Scritto da dandi98 |
2018-08-28 10:03:43 - Re: Estrarre informazioni da XML
|
Grazie mille Cya ! Sei sempre gentilissimo ed esaustivo !
|
|
Scritto da Daniele aka Palmux |
2018-08-28 10:07:25 - Re: Estrarre informazioni da XML
|
|
|
Scritto da dandi98 |
2018-08-28 10:08:41 - Re: Estrarre informazioni da XML
|
Sorry.. credevo fosse un nickname
|
|
Scritto da dandi98 |
2019-03-17 13:43:46 - Re: Estrarre informazioni da XML
|
salve a tutti amici, riapro questo post perché ho difficolta nell'estrarre da questo report xml i campi contenuti nel tag <groups> </groups>.
Spero in un vostro aiuto. grazie e buona domenica <?xml version="1.0"?> <ocs> <meta> <status>ok</status> <statuscode>100</statuscode> <message>OK</message> <totalitems></totalitems> <itemsperpage></itemsperpage> </meta> <data> <enabled>1</enabled> <storageLocation>/web/htdocs/www.mysite.it/home/nextcloud/data/USER_NAME</storageLocation> <id>USER_NAME</id> <lastLogin>1552754625000</lastLogin> <backend>Database</backend> <subadmin/> <quota> <free>0</free> <used>0</used> <total>0</total> <relative>0</relative> <quota>0</quota> </quota> <email/> <displayname>USER_NAME</displayname> <phone></phone> <address></address> <website></website> <twitter></twitter> <groups> <element>G-0000</element> <element>G-0200</element> </groups> <language>it</language> <locale></locale> <backendCapabilities> <setDisplayName>1</setDisplayName> <setPassword>1</setPassword> </backendCapabilities> </data> </ocs> --- Ultima modifica di dandi98 in data 2019-03-17 13:44:19 --- |
|
Scritto da Daniele aka Palmux |
2019-03-18 16:25:55 - Re: Estrarre informazioni da XML
|
Ciao caro, mostra il codice ed indica dove ti perdi, così ne discutiamo insieme.
|
|
Scritto da dandi98 |
2019-03-18 20:42:45 - Re: Estrarre informazioni da XML
|
ciao Daniele, in realtà sono riuscito a listare il codice html in questo modo:
------ Ed estraggo i valori che mi servono richiamando la chiave d['elements'] però sono sicuro che esista un modo più elegante del mio per estrarre gli elementi del tag groups |
|
Scritto da Daniele aka Palmux |
2019-03-19 03:19:20 - Re: Estrarre informazioni da XML
|
Prova con un semplice:
>>> x = ET.fromstring(xml_file) >>> [i.text for i in x[1].find('groups')] ['G-0000', 'G-0200'] Cya |
|
Scritto da dandi98 |
2019-03-19 10:18:15 - Re: Estrarre informazioni da XML
|
grazie mille come sempre .
Buona giornata |
Pagina: 1
Esegui il login per scrivere una risposta.