当 findall() 找不到匹配项时,使用 ElementTree 提供默认值解析 XML
Providing a default value parsing XML with ElementTree when findall() finds no match
对 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 文件没有元素 ("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns)。在这些情况下,会出现以下错误:name 'provisions' is not defined.
我需要使用变量来进一步计算代码(例如:assets - provisions),我需要将 'provisions' 的值分配给 [=32= 中的 0 ] 没有 ("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns) 元素的文件。
我该如何进行?
非常感谢!
for
/else
子句提供了一种处理方法:
for prov in tree.findall("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns):
provisions = int(prov.text)
break
else:
provisions = 0
当 break
永远不会发生时,else
子句是 运行。
您也可以初始化该值,然后在循环中重新分配:
provisions = 0
for prov in tree.findall("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns):
provisions = int(prov.text)
对 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 文件没有元素 ("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns)。在这些情况下,会出现以下错误:name 'provisions' is not defined.
我需要使用变量来进一步计算代码(例如:assets - provisions),我需要将 'provisions' 的值分配给 [=32= 中的 0 ] 没有 ("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns) 元素的文件。
我该如何进行?
非常感谢!
for
/else
子句提供了一种处理方法:
for prov in tree.findall("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns):
provisions = int(prov.text)
break
else:
provisions = 0
当 break
永远不会发生时,else
子句是 运行。
您也可以初始化该值,然后在循环中重新分配:
provisions = 0
for prov in tree.findall("nbb:ProvisionsDeferredTaxes[@contextRef='CurrentInstant']", ns):
provisions = int(prov.text)