2017-11-14 6 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)가 없습니다. 이 경우 다음과 같은 오류가 나타납니다. '조항'이름이 정의되지 않았습니다.

변수를 사용하여 계산을 추가로 낮추어야합니다 (예 : assets - provisions). '조항'값을 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 절은이 문제를 처리하는 한 가지 방법을 제공합니다.


또한 값을 초기화하고 루프에 재 할당 할 수

:

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