[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