非常新的Python,我正在构建一个学习Python的项目。该项目涉及XML解析,我使用了ElementTree。
这是我目前的代码:
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文件,这非常适用。
但是,我想要使用代码的一些XML文件没有Element(" nbb:ProvisionsDeferredTaxes [@contextRef =' CurrentInstant']", NS)。在这些情况下,出现以下错误:名称'条款'没有定义。
我需要使用这些变量在代码中进一步计算(例如:资产 - 条款),我需要'条款'的值。在没有(" nbb:ProvisionsDeferredTaxes [@contextRef =' CurrentInstant']",ns)元素的XML文件中分配给0。
我该怎么办?
非常感谢!
答案 0 :(得分:0)
for
/ else
子句提供了一种处理此问题的方法:
for prov in tree.findall("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns):
provisions = int(prov.text)
break
else:
provisions = 0
else
子句在break
永远不会发生的情况下运行。
您也可以初始化该值,然后重新分配循环:
provisions = 0
for prov in tree.findall("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns):
provisions = int(prov.text)