我试图编写一个简单的程序从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>
现在,我可以使用
^{pr2}$在手动清理名称空间之后,但是我正在寻找一种解决方案,它可以读取条目而不管它们的名称空间是什么,或者在解析之前删除这些名称空间。在
注意,我是python中的一个完全的noob,我读过:Python and GnuCash: Extract data from GnuCash files,Cleaning an XML file in Python before parsing和{a3}以及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
但我没能应用它。我似乎无法检索文件中显示的标记名。在
我认为下面的python代码将对您有所帮助。在
示例.xml
PYTHON代码:删除根标记的xmlns。
^{pr2}$输出:
{http://www.gnucash.org/XML/gnc}产品信息 产品信息
相关问题 更多 >
编程相关推荐