【问题标题】:python: xml.etree.ElementTree, removing "namespaces"python:xml.etree.ElementTree,删除“命名空间”
【发布时间】:2010-12-14 19:16:46
【问题描述】:

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

我想在不指定命名空间的情况下按名称访问此标签,可以吗? 例如:

root.findall("/molpro/job")

代替:

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

【问题讨论】:

  • 我想补充一点,在我的示例中,命名空间是相同的,但在整个 Xml 文件中还有其他变量命名空间。我只想关闭这个功能,就像在 xml.dom.minidom 解析器中一样。

标签: python xml


【解决方案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 表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 2020-04-06
      • 2014-12-11
      • 2023-03-07
      相关资源
      最近更新 更多