2014-09-02 51 views
1

編輯:我找到了一種方法,使其工作。事實證明,我有一個elem.clear()調用,我沒有在下面的代碼中顯示。我爲此道歉。我修改了它,以便你可以看到它是如何。事實證明,如果我在if語句中移動該呼叫,問題就消失了。但我還是不明白在if語句完成之前如何調用clear。iterparse沒有得到兒童文字

我有幾分,看起來像這樣的XML文件:

<alarm> <alarm_id> 127688705 </alarm_id> <site> 1  </site> <event_time> 14/08/31 00:01:00 </event_time> <cease_time> 14/08/31 00:07:00 </cease_time> <problem_text> 
    Something went wrong          </problem_text> </alarm> 

我知道它沒有正確的風格,但是這是我的腳本如何接收它,所以我想過放棄你們的全貌。該文件基本上具有<root>元素下的數百個<alarm>元素。

我想要做的就是用iterparse解析文件,並從<alarm>的子元素中獲取所有文本信息。我的腳本到目前爲止是這樣的:

import xml.etree.cElementTree as etree 

try: 
    sourcefile = open('file.xml') 
except IOError: 
    print('Cannot open ', sourcefile) 
    return -1 

for event, elem in etree.iterparse(sourcefile): 
    if elem.tag == 'alarm': 
     print("event:", event) 
     for child in elem: 
      print(child.tag, child.text) 
    elem.clear() 

,但我得到Nonechild.text結果。這是我運行腳本時得到的輸出結果:

你們能幫我一個忙嗎?

+0

你的代碼工作正常我。 'Python 2.7.3'。 – 2014-09-02 18:25:28

回答

0

刪除return語句並且此代碼正常工作。

0

我有這個相同的問題 - 我的根元素有文本和屬性,但子元素將沒有文本或元素。我原來的代碼是:

for _, element in ET.iterparse(file_in): 
     el = shape_element(element) 
     if el: 
      data.append(el) 
     element.clear() 

的作品,並沒有明確的子元素的文字代碼

for _, element in ET.iterparse(file_in): 
     el = shape_element(element) 
     if el: 
      data.append(el) 
      element.clear()