2017-11-14 4 views
0

Pythonには新しく、Pythonを学ぶプロジェクトを構築しています。このプロジェクトには、ElementTreeを使用したXML解析が含まれています。これは完全に正常に動作し、ほとんどのXMLファイルの場合findall()が一致しないとElementTreeでXMLを解析するデフォルト値を提供する

import xml.etree.ElementTree as etree 
tree = etree.parse('ar.xml') 
root = tree.getroot() 

ns = {'nbb': 'http://www.nbb.be/be/fr/pfs/ci/2017-04-01'} 

for ass in tree.findall("nbb:Assets[@contextRef='CurrentInstant']", ns): 
    assets = ass.text 

for pay in tree.findall("nbb:AmountsPayable[@contextRef='CurrentInstant']", ns): 
    payables = pay.text 

for prov in tree.findall("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns): 
    provisions = prov.text 

for cap in tree.findall("nbb:IssuedCapital[@contextRef='CurrentInstant']", ns): 
    capital = cap.text 

print assets 
print payables 
print provisions 
print capital 

これは私が現在持っているコードです。

しかし、コードを使用したいXMLファイルの中には要素( "nbb:ProvisionsDeferredTaxes [@ contextRef = 'CurrentInstant']"、ns)がありません。そのような場合、次のエラーが表示されます。名前 'provision'は定義されていません。

私は、変数を使用してコードをさらに下げていく必要があります(assets:provisionなど)。そして、 'provision'という値をXMLファイルの0に割り当てる必要があります。 "nbb:ProvisionsDeferredTaxes [@ contextRef = 'CurrentInstant']"、ns)要素。

どうすればよいですか?

多くの感謝! breakが行われたことがないとき

for prov in tree.findall("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns): 
    provisions = int(prov.text) 
    break 
else: 
    provisions = 0 

else句が実行されます。

+0

はもっと重要な実装言語よりも、問題の本質的な要素が含まれるように、タイトルのスペースを使用する - タグが使用されていますタイトルの言語を自然に流す(そして簡単に適合する)場合を除いて、言語の表示とフィルタリングのために使用されます。 [discussion on meta](https://meta.stackoverflow.com/a/251861/14122)を参照してください。 –

答えて

0

for/else句は、これを処理する1つの方法を提供します。


また、値を初期化し、ループ内で再割り当てすることができます:

provisions = 0 
for prov in tree.findall("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns): 
    provisions = int(prov.text) 
関連する問題