View Full Version : [Python]Parsing xml
Ciao,
ho un file xm tipo questo:
<Environment NumLayers="2">
<Map Id="aaaaa" IsCategorical="0"/>
<Map Id="bbbbb" IsCategorical="0"/>
<Mask Id="ccccc"/>
</Environment>
Vorrei estrarre con uno script python i valori contenuti in map ip e mask id.
Come posso fare?
Grazie.
http://docs.python.org/library/markup.html
Si,
l'avevo letta...ma non è che sia molto esperto di python.....
Non è che potete farmi un esempio?
Grazie ancora.
cdimauro
21-04-2010, 21:40
Per un parsing molto semplice e veloce (ma senza tanti controlli), ti suggerisco expat (http://docs.python.org/library/pyexpat.html?highlight=expat#module-xml.parsers.expat). Trovi un esempio bello e pronto che ti suggerisco di provare e di adattare in due secondi per il tuo caso d'uso.
Per qualcosa di più robusto c'è il link che ha ti ha segnalato Riccardo prima.
Scusate ma sono alle prime armi con python.
Allora ho provato questo esempio:
import xml.parsers.expat
# 3 handler functions
def start_element(name, attrs):
print 'Start element:', name, attrs
def end_element(name):
print 'End element:', name
def char_data(data):
print 'Character data:', repr(data)
p = xml.parsers.expat.ParserCreate()
p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data
p.Parse("""<?xml version="1.0"?>
<parent id="top"><child1 name="paul">Text goes here</child1>
<child2 name="fred">More text</child2>
</parent>""", 1)
Non mi viene mostrato nessun risultato lanciandolo da shell.
Da come ho capito gli handler sono tipo dei thread che mostrano il contenuto del file.
Cosa sbaglio?
Grazie.
Come non detto...ora improvvisamente funziona.....
Ho adattato lo script in questo modo:
import xml.parsers.expat
# 3 handler functions
def start_element(name, attrs):
if(name=="Map" ):
print 'Map:', attrs
if(name=="Mask"):
print 'Mask:', attrs
p = xml.parsers.expat.ParserCreate()
p.StartElementHandler = start_element
p.ParseFile(open("request.xml","r"))
Il problema è che l'output é:
Map: {u'IsCategorical': u'0', u'Id': u'rain_coolest.tif'}
Solo che a me servirebbe solo rain_coolest.tif
Come lo estraggo?
Grazie.
cdimauro
22-04-2010, 14:48
if name == 'Map':
print 'IsCategorical:', attrs['IsCategorical']
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.