Найти - Пользователи
Полная версия: работа с пространствами имён xml
Начало » Python для новичков » работа с пространствами имён xml
1
kzoi_py
Всем доброго времени суток. Решил поиграть с документами ворда и опенврайтера в формате 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')
в итоге мне вернулся пустой кортеж. Натолкните на мысль плиз или подскажите как лучше поступить ) За ранее благодарен.
kzoi_py
Вопрос решён вот так

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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB