hexim> Sent: Friday, April 06, 2007 7:13 PM
> [...] 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.

Záleží na tom, co všechno může být v xml souboru
uloženo a jak s tím budu chtít pracovat. Příklad
jsem uložil do xml souboru v daném kódování s BOM
na začátku a fungovalo mi bez problému tohle:
-----------------------------------------------
import xml.etree.ElementTree as et

tree = et.parse('a.xml')
d = dict( (e.tag, e.text) for e in tree.getiterator() )
print d

print d['user']
print d['password']

print d['tagA']
print type(d['tagA'])  # unicode
-----------------------------------------------

Výsledek vypadal takto:
-----------------------------------------------
C:\tmp>python a.py
{'neco': '\n                 ', 'myxml': '\n  ', 'db': 'databaze', 'host': 
'localhost', 'user': 'roo
t', 'mysql': '\n  \t', 'password': 'heslo', 'tagA': u'Ahoj Sv\u011bte'}
root
heslo
Ahoj Světe
<type 'unicode'>
-----------------------------------------------

Pozor! Je to nasrknuté do slovníku d, ve kterém
se ztratí duplicity. Pokud by tam bylo například
víc elementů user a password, bude ve slovníku
jen poslední z nich. To je aplikační věc -- možná
se to z toho stromu bude muset posbírat jinak.

Obecně, pro zpracování XML se používá buď SAX.
kdy průběžně zpracovávám části dokumentu, který
může být i extrémně velký -- nevytváří se jeho
obraz v paměti. Druhý přístup představuje DOM,
kdy se v paměti vytvoří model dokumentu, který 
se pak různě prochází. DOM byl ale napsán původně
v jiném programovacím jazyce a do Pythonu byl
tak trochu otrocky přepsán. Nevyužívá se zde 
výhod Pythonu ve smyslu vyjadřovacích schopností
a práce s pythonovskými základními datovými 
strukturami. ElementTree je vlastně obdoba
DOM, která přebírá základní myšlenku, ale 
implementuje ji čistě pythonovskými prostředky.


pepr

P.S. pro další šťourání nechť poslouží 
     následující příklad:

import xml.etree.ElementTree as et

tree = et.parse('a.xml')
print dir(tree)
et.dump(tree)

for e in tree.getiterator():
    print e
    print e.tag, e.text, e.attrib


_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem