2017-03-06 27 views
0

我只是想分析一個XML文件,該文件是一樣的解析Python中的XML文件,該文件嵌套的標籤是有

<?xml version="1.0" encoding="UTF-8"?><Significant Major="3" Minor="0" Revision="1" xmlns="urn:reuterscompanycontent:significantdevelopments03"><RepNo>0091N</RepNo><CompanyName Type="Primary">XYZ</CompanyName><Production Date="2017-02-23T18:10:39" /><Developments><Development ID="3534388"><Dates><Source>2017-02-23T18:18:32</Source><Initiation>2017-02-23T18:18:32</Initiation><LastUpdate>2017-02-23T18:23:26</LastUpdate></Dates><Flags><FrontPage>0</FrontPage><Significance>1</Significance></Flags><Topics><Topic1 Code="254">Regulatory/Company Investigation</Topic1></Topics><Headline>FTC approves final order settling charges for Abbott's deal with St. Jude Medical</Headline></Development></Developments></Significant> 

我只是想分析的發展標記和解析它的每一個嵌套的標籤 我有下面的代碼:

import xml.etree.cElementTree as ET 
tree = ET.ElementTree(file='../rawdata/SigDev_0091N.xml') 

#get the root element 
root = tree.getroot() 

#print root.tag, root.attrib 

for child in root: 
#print child.tag, child.attrib 
    name = child.tag 
    print name 
    print 'at line 13' 
    if name is 'Developments': 
     print 'at line 15' 
     for devChild in name['Developments']: 
      print devChild.tag,devChild.attrib 

它不會去if區塊內,我不知道爲什麼?

+1

你縮進這裏搞砸!它是否也在腳本文件中? – jkalden

+0

否否不在腳本文件中縮進非常正確 – ggupta

+0

在文章左下角有一個編輯按鈕。請使用它來更正您的格式。 Python *關心*關於格式化.... –

回答

3

檢查name is 'Developments'總是返回false作爲child.tag返回{xmlns}tagname格式的值。

對於您的情況:

名= {甕:reuterscompanycontent:significantdevelopments03}發展

您可參照本question的答案。

簡單字符串方法strip(),find(),split()re可以幫助您跳過名稱空間進行比較。

Python文檔相關:https://docs.python.org/2/library/xml.etree.elementtree.html#parsing-xml-with-namespaces

+0

你可以幫我解析它嗎?假設我想要在開發中獲得源的價值,那麼我將如何? – ggupta

+0

它幫助我解決了我的問題,謝謝:) – ggupta

0

對不起@Gaurav,我不明白這一點, 打印(名稱)給出:

{urn:reuterscompanycontent:significantdevelopments03}Developments 

,並要檢查,如果它是「發展」。 您可以確認我執行代碼時是否做錯了。 我不能把評論(聲譽)。

+0

我在我的xmlns XML,所以它正在追加到每個輸出。你可以忽略這一點,並請提供給我正確的方法來解析開發標記 – ggupta

+0

好吧,name!= Developements,因此它不會在if裏面。我想我們必須解析字符串。 so ... names.split('}')[1] ==開發。 我還會錯嗎? –