Ответ 1
По крайней мере, с помощью lxml2 можно немного уменьшить эту надбавку:
root.findall("/n:molpro/n:job",
namespaces=dict(n="http://www.molpro.net/schema/molpro2006"))
Мне нравится, как ElementTree анализирует xml, в частности, функцию Xpath. У меня есть результат в xml из приложения с вложенными тегами.
Я хотел бы получить доступ к этим тегам по имени без указания пространства имен, возможно ли это? Например:
root.findall("/molpro/job")
вместо:
root.findall("{http://www.molpro.net/schema/molpro2006}molpro/{http://www.molpro.net/schema/molpro2006}job")
По крайней мере, с помощью lxml2 можно немного уменьшить эту надбавку:
root.findall("/n:molpro/n:job",
namespaces=dict(n="http://www.molpro.net/schema/molpro2006"))
Вы можете написать свою собственную функцию, чтобы обернуть скверно выглядящие биты, например:
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.