Python: xml.etree.ElementTree,去除“命名空间”

26

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

我想通过名称访问这些标签,而不需要指定命名空间,这是否可能? 例如:

root.findall("/molpro/job")

改为:

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

1
我想添加一个注释,在我的示例中,命名空间是相同的,但整个Xml文件中存在其他不同的命名空间。我只想关闭此功能,就像在xml.dom.minidom解析器中一样。 - pygabriel
2个回答

8

至少在使用lxml2时,可以在一定程度上减少这种开销:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接