以编程方式清除/忽略XML中的名称空间

我正在尝试编写一个简单的程序来读取我的GNUCash的财务XML文件,并在此过程中学习Python。

XML看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<gnc-v2
     xmlns:gnc="http://www.gnucash.org/XML/gnc"
     xmlns:act="http://www.gnucash.org/XML/act"
     xmlns:book="http://www.gnucash.org/XML/book"
     {...}
     xmlns:vendor="http://www.gnucash.org/XML/vendor">
<gnc:count-data cd:type="book">1</gnc:count-data>
<gnc:book version="2.0.0">
<book:id type="guid">91314601aa6afd17727c44657419974a</book:id>
<gnc:count-data cd:type="account">80</gnc:count-data>
<gnc:count-data cd:type="transaction">826</gnc:count-data>
<gnc:count-data cd:type="budget">1</gnc:count-data>
<gnc:commodity version="2.0.0">
  <cmdty:space>ISO4217</cmdty:space>
  <cmdty:id>BRL</cmdty:id>
  <cmdty:get_quotes/>
  <cmdty:quote_source>currency</cmdty:quote_source>
  <cmdty:quote_tz/>
</gnc:commodity>

现在,我可以迭代并使用结果

import xml.etree.ElementTree as ET 
r = ET.parse("file.xml").findall('.//') 

手动清理命名空间后,但我正在寻找一种解决方案,可以读取条目,无论其名称空间,或在解析之前删除名称空间。

请注意,我是python中的完全noob,我读过:Python和GnuCash:从GnuCash文件中提取数据,在解析和python之前用Python清理XML文件:xml.etree.ElementTree,删除“名称空间” ElementTree文档,我仍然失去...

我想出了这个解决方案:

def strip_namespaces(self, tree):

    nspOpen = re.compile("<w*:", re.IGNORECASE)
    nspClose = re.compile("</w*:", re.IGNORECASE)

    for i in tree:
        start = re.sub(nspOpen, '<', tree.tag)          
        end = re.sub(nspOpen, '</', tree.tag)

    # pprint(finaltree)
    return

但我未能应用它。 我似乎无法检索出现在文件上的标签名称。

链接地址: http://www.djcxy.com/p/58797.html

上一篇: Programatically clean/ignore namespaces in XML

下一篇: How to specify namespace and schema location in an XML?