3

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の完全な初心者であり、読んだことに注意してください:Python and GnuCash: Extract data from GnuCash filesCleaning an XML file in Python before parsing and python: xml.etree.ElementTree, remove "namespaces" along with ElementTree docs と私はまだ迷っています...

私はこの解決策を思いつきました:

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

しかし、私はそれを適用することに失敗しています。ファイルに表示されるタグ名を取得できないようです。

4

1 に答える 1