2014-12-03 3 views
-1

많은 지원 페이지, 예제 및 문서를 살펴 보았지만 파이썬을 사용한 후 어떻게 달성 할 수 있는지에 관해서는 여전히 혼란 스럽다.Python에서 XML 구문 분석 - 어떻게해야하는지 잘 모르겠다.

XML 피드를 처리/구문 분석해야하며 XML 문서에서 매우 구체적인 값을 가져야합니다. 어느 곳에서 저음비롭다.

XML은 다음과 같습니다 : 그것은 다시 설정하고 다음 달 1 일에 다시 시작할 때

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<feed> 
<title type="text">DailyTreasuryYieldCurveRateData</title> 
<id></id> 
<updated>2014-12-03T07:44:30Z</updated> 
<link rel="self" title="DailyTreasuryYieldCurveRateData" href="DailyTreasuryYieldCurveRateData" /> 
<entry> 
<id></id> 
<title type="text"></title> 
<updated>2014-12-03T07:44:30Z</updated> 
<author> 
    <name /> 
</author> 
<link rel="edit" title="DailyTreasuryYieldCurveRateDatum" href="DailyTreasuryYieldCurveRateData(6235)" /> 
<category /> 
<content type="application/xml"> 
    <m:properties> 
    <d:Id m:type="Edm.Int32">6235</d:Id> 
    <d:NEW_DATE m:type="Edm.DateTime">2014-12-01T00:00:00</d:NEW_DATE> 
    <d:BC_1MONTH m:type="Edm.Double">0.01</d:BC_1MONTH> 
    <d:BC_3MONTH m:type="Edm.Double">0.03</d:BC_3MONTH> 
    <d:BC_6MONTH m:type="Edm.Double">0.08</d:BC_6MONTH> 
    <d:BC_1YEAR m:type="Edm.Double">0.13</d:BC_1YEAR> 
    <d:BC_2YEAR m:type="Edm.Double">0.49</d:BC_2YEAR> 
    <d:BC_3YEAR m:type="Edm.Double">0.9</d:BC_3YEAR> 
    <d:BC_5YEAR m:type="Edm.Double">1.52</d:BC_5YEAR> 
    <d:BC_7YEAR m:type="Edm.Double">1.93</d:BC_7YEAR> 
    <d:BC_10YEAR m:type="Edm.Double">2.22</d:BC_10YEAR> 
    <d:BC_20YEAR m:type="Edm.Double">2.66</d:BC_20YEAR> 
    <d:BC_30YEAR m:type="Edm.Double">2.95</d:BC_30YEAR> 
    <d:BC_30YEARDISPLAY m:type="Edm.Double">2.95</d:BC_30YEARDISPLAY> 
    </m:properties> 
</content> 
</entry> 
<entry> 
<id></id> 
<title type="text"></title> 
<updated>2014-12-03T07:44:30Z</updated> 
<author> 
    <name /> 
</author> 
<link rel="edit" title="DailyTreasuryYieldCurveRateDatum" href="DailyTreasuryYieldCurveRateData(6236)" /> 
<category /> 
<content type="application/xml"> 
    <m:properties> 
    <d:Id m:type="Edm.Int32">6236</d:Id> 
    <d:NEW_DATE m:type="Edm.DateTime">2014-12-02T00:00:00</d:NEW_DATE> 
    <d:BC_1MONTH m:type="Edm.Double">0.04</d:BC_1MONTH> 
    <d:BC_3MONTH m:type="Edm.Double">0.03</d:BC_3MONTH> 
    <d:BC_6MONTH m:type="Edm.Double">0.08</d:BC_6MONTH> 
    <d:BC_1YEAR m:type="Edm.Double">0.14</d:BC_1YEAR> 
    <d:BC_2YEAR m:type="Edm.Double">0.55</d:BC_2YEAR> 
    <d:BC_3YEAR m:type="Edm.Double">0.96</d:BC_3YEAR> 
    <d:BC_5YEAR m:type="Edm.Double">1.59</d:BC_5YEAR> 
    <d:BC_7YEAR m:type="Edm.Double">2</d:BC_7YEAR> 
    <d:BC_10YEAR m:type="Edm.Double">2.28</d:BC_10YEAR> 
    <d:BC_20YEAR m:type="Edm.Double">2.72</d:BC_20YEAR> 
    <d:BC_30YEAR m:type="Edm.Double">3</d:BC_30YEAR> 
    <d:BC_30YEARDISPLAY m:type="Edm.Double">3</d:BC_30YEARDISPLAY> 
    </m:properties> 
</content> 
</entry> 
</feed> 

이 XML 문서 달의 기간 동안 매일 추가 된 새로운 항목을 가져옵니다.

d : NEW_DATE의 날짜와 d : BC_10YEAR의 값을 추출해야합니다. 단 하나의 항목 만 있으면 문제가 없지만 파일을 통과시키는 방법을 고민하고 있습니다. 각 ENTRY 블록에서 관련 날짜 및 값을 추출합니다.

모든 도움을 주시면 대단히 감사하겠습니다.

from BeautifulSoup import BeautifulSoup 

xmldoc = open('datafile.xml', 'r').read() 
bs = BeautifulSoup(xmldoc) 

entryList = bs.findAll('entry') 

for entry in entryList: 
    print entry.content.find('m:properties').find('d:new_date').contents[0] 
    print entry.content.find('m:properties').find('d:bc_10year').contents[0] 

그런 다음 (목록 등 추가) 데이터에 대해 수행 할 무엇과 print을 대체 할 수

+0

내가 게시 할 수 있도록 XML에서 묶음 또는 URL 링크를 제거해야했습니다. 나는 그 (것)들이 해결책에 대한 어떤 충격든지 가지고 있어야한다 분실 된 ㄴ다는 것을 믿지 않는다. –

+0

http://stackoverflow.com/questions/1912434/how-do-i-parse-xml-in-python –

답변

0

BeautifulSoup로 아마 당신이 찾고있는 무엇을 할 수있는 가장 쉬운 방법입니다.

+0

감사합니다. BeautifulSoup에서 약간 놀았으니이 점에 대해서는 확실히 알려 드리겠습니다. 그것이 효과가 있었는지 아십시오. –

+1

위의 내용을 약간 수정하면 내가 필요로하는 방식으로이 작업을 수행 할 수있었습니다. 많은 감사합니다! –

+0

걱정하지 않아서 기쁘다. :). 자유롭게 답을 +1 유용성에 대한 upvote;) – Jakob