[python] parsowanie xml za pomoca minidom

0

Mam mały problemz parsowaniem xmla za pomoca minidom xml. potrzebuje wgrać cały TERC.xml do bazy, próbowałem googlowac ale pÓÓÓÓki co nic nie moge znaleźć.
XML dla tych co nie wiedzią wygląda tak:

<?xml version="1.0" encoding="UTF-8"?>
<teryt>
<catalog name="TERC" type="all" date="2008-01-01">
<row>
<col name="WOJ">02</col>
<col name="POW"/>
<col name="GMI"/>
<col name="RODZ"/>
<col name="NAZWA">WOJ. DOLNOŚLĄSKIE</col>
<col name="NAZDOD"/>
<col name="STAN_NA">2008-01-01</col>
</row>
<row>
<col name="WOJ">02</col>
<col name="POW">01</col>
<col name="GMI"/>
<col name="RODZ"/>
<col name="NAZWA">Powiat bolesławiecki</col>
<col name="NAZDOD"/>
<col name="STAN_NA">2008-01-01</col>
</row>
.....
</catalog>
</teryt>

obecnie na bazgrałem mnie-więcej tyle:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from xml.dom.minidom import parse
import xml.dom.minidom
import string

def __main__():
    #funkcja glowna
    terytWM = 'WMRODZ.xml'
    terytTERC = 'TERC.xml'
    terytSIMC = 'SIMC.xml'
    baza = {'adres' : 'localhost', 'user' : 'root', 'haslo':'', 'nazwa':'teryt'}
    
    terc(terytTERC)
#end __main__

def terc(plik):
    xmldoc = parse(plik)
    teryt=xmldoc.getElementsByTagName("teryt")[0]
    catalog=teryt.getElementsByTagName("catalog")[0]
    for row in catalog.getElementsByTagName("row"):
        for col in row.getElementsByTagName("col"):
            print col.toxml()
            #print col.data
#end terc

if __name__ == '__main__':
    __main__()

Cały urok problemu to to że nie moge się dobrać do wartości pól col. O ile uzyskanie atrybutu name jest proste to juz pobranie zawartości z col graniczy z cudem. Najchętnie zabrałbym się za parsowanie xmla regexpami, ale to raczej nie będzie ciekawe rozwiązanie. SAX'a ruszać nie chce, tak jak i pełnego dom.

Rozwiązałem sprawe korzystająć z ElementTree.

0
text = ''.join([node.nodeValue for node in col.childNodes])
            print text

Węzeł col, ma dzieci, które są węzłami tekstowymi (może być więcej niż jeden węzeł). Z tego co pamiętam, to nawet w specyfikacji XML jest, że tekst to jest węzeł. Dlatego tak dziwnie się trzeba odwoływać.

Ogólnie radzę zerknąć na ElementTree. Moim zdaniem znacznie wygodniejsze i jak to mówią "more pythonic" ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1