Уведомления

Группа в Telegram: @pythonsu

#1 Июль 11, 2010 11:21:59

kzoi_py
От:
Зарегистрирован: 2009-02-01
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с пространствами имён xml

Всем доброго времени суток. Решил поиграть с документами ворда и опенврайтера в формате xml и вот… барабанная дробь :) столкнулся с трудностями ) Привожу в качестве примера xml код:

<?xml version='1.0'?>
<g:start xmlns:a="123" xmlns:g="432">
<a:f>efsfdd</a:f>
<a:f>f5</a:f>
<a:f>2</a:f>
<a:f>66</a:f>
</g:start>
Как мне достучаться до содержимого тега a:f ? Ранее с такими структурами не работал, но анализировал с помощью модуля lxml нужные мне структуры (разумеется в них не использовались пространства имён). Была попытка работать с документом при помощи DOM.
from lxml import etree
import StringIO, lxml.sax
from xml.dom.pulldom import SAX2DOM

fp = open('321.xml').readlines()
s = ''
for i in xrange(len(fp)):
s += fp[i]
s = s.decode('cp1251')
buf = StringIO.StringIO(s)
three = etree.parse(buf)
handler = SAX2DOM()
lxml.sax.saxify(three,handler)
dom = handler.document
print dom.getElementsByTagName('a:f')
в итоге мне вернулся пустой кортеж. Натолкните на мысль плиз или подскажите как лучше поступить ) За ранее благодарен.



Офлайн

#2 Июль 11, 2010 16:44:29

kzoi_py
От:
Зарегистрирован: 2009-02-01
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с пространствами имён xml

Вопрос решён вот так

from lxml import etree
import StringIO

fp = open('321.xml').readlines()
s = ''
for i in xrange(len(fp)):
s += fp[i]
s = s.decode('cp1251')
buf = StringIO.StringIO(s)
three = etree.parse(buf)
k = ['g','a']
val = ['432', '123']
r = three.xpath('/g:start/a:f', namespaces={k[0] : val[0], k[1] : val[1] })
for i in xrange(len(r)):
print r[i].text



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version