[python] XML PARSER
Jan Martinek
honza na dp.fce.vutbr.cz
Sobota Duben 7 00:13:17 CEST 2007
hexima na seznam.cz wrote:
> Dobry den,
>
> jsem Pythoňátko které již tyden hledá nejake relevantni informace o
> zpracovani XML souboru v Pythonu. Jedna se mi o rozparsovani XML
> dokumentu do promenne , nejlepe slovniku , napr x = {} aby bylo mozne
> cist hodnoty nasledovne:
>
> hodnotaA = x['tagA']
> hodnotaB = x['user']
>
> Vzorovy XML:
>
> <?xml version='1.0' encoding='UTF-8'?>
> <myxml>
> <neco>
> <tagA>Ahoj Světe</tagA>
> </neco>
> <mysql>
> <host>localhost</host>
> <user>root</user>
> <password>heslo</password>
> <db>databaze</db>
> </mysql>
> </myxml>
>
>
> Poradi mi nekdo, nejlepe malym vzorovym prikladem.
>
> Predem dekuji za ochotu.
>
> Hexim
>
Mě to funguje, jestliže se vynechá ten "deklarační" řádek. Asi to není
úplně košér, ale nevím, jak to udělat líp než takhle:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from elementtree.ElementTree import *
xml = '''
<myxml>
<neco>
<tagA nějaký='atribut'>Ahoj Světe</tagA>
</neco>
<mysql ble='ble'>
<host>localhost</host>
<user>root</user>
<password>heslo</password>
<db>databaze</db>
</mysql>
</myxml>
'''
rootelem = fromstring(xml)
queue = [rootelem]
while queue:
elem = queue.pop()
queue.extend(elem.getchildren())
print elem.tag, elem.text
for k, v in elem.attrib.iteritems():
print k,v
Tohle projde celý XML strom, najde všechny tagy, jejich atributy (ve
formě slovníku) a texty. Obvykle se na to asi používá rekurze, ale přes
zásobník mi to přišlo lepší.
Užitečná metoda je taky getiterator() a spousta dalších.
Jan Martinek
Další informace o konferenci Python