open library example etree dict datacamp create python xml

library - xml python 3



python: xml.etree.ElementTree, eliminando "espacios de nombres" (2)

Me gusta la forma en que ElementTree analiza xml, en particular la función Xpath. Tengo un resultado en xml de una aplicación con etiquetas anidadas.

Me gustaría acceder a estas etiquetas por nombre sin especificar el espacio de nombres, ¿es posible? Por ejemplo:

root.findall("/molpro/job")

en lugar de:

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


Al menos con lxml2, es posible reducir esta sobrecarga de alguna manera:

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


Podría escribir su propia función para envolver los bits desagradables, por ejemplo:

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'')

No es muy divertido, lo admito, pero al menos podrás leer tus expresiones xpath.