Подтвердить что ты не робот

Python: xml.etree.ElementTree, удаление "namespaces"

Мне нравится, как ElementTree анализирует xml, в частности, функцию Xpath. У меня есть результат в xml из приложения с вложенными тегами.

Я хотел бы получить доступ к этим тегам по имени без указания пространства имен, возможно ли это? Например:

root.findall("/molpro/job")

вместо:

root.findall("{http://www.molpro.net/schema/molpro2006}molpro/{http://www.molpro.net/schema/molpro2006}job")
4b9b3361

Ответ 1

По крайней мере, с помощью lxml2 можно немного уменьшить эту надбавку:

root.findall("/n:molpro/n:job",
             namespaces=dict(n="http://www.molpro.net/schema/molpro2006"))

Ответ 2

Вы можете написать свою собственную функцию, чтобы обернуть скверно выглядящие биты, например:

def my_xpath(doc, ns, xp);
    num = xp.count('/')
    new_xp = xp.replace('/', '/{%s}')
    ns_tup = (ns,) * num
    doc.findall(new_xp % ns_tup)

namespace = 'http://www.molpro.net/schema/molpro2006'
my_xpath(root, namespace, '/molpro/job')

Не так весело, что я допускаю, но, по крайней мере, вы сможете прочитать свои выражения xpath.