python:xml.etree.ElementTree,删除“命名空间”

时间:2009-11-09 21:17:47

标签: python xml

我喜欢ElementTree解析xml的方式,特别是Xpath功能。我有一个带有嵌套标签的应用程序的xml输出。

我想按名称访问此标记而不指定命名空间,是否可能? 例如:

root.findall("/molpro/job")

而不是:

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

2 个答案:

答案 0 :(得分:8)

至少对于lxml2,可以稍微减少这种开销:

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

答案 1 :(得分:5)

您可以编写自己的函数来包装令人讨厌的位,例如:

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表达式。