2014-09-02 6 views
1

EDIT: Я нашел способ заставить его работать. Оказывается, у меня был вызов elem.clear(), который я не показывал в приведенном ниже коде. Я прошу прощения за то. Я изменил его, чтобы вы могли видеть, как это было. Оказывается, если я переведу этот вызов внутри оператора if, проблема исчезнет. Но я до сих пор не понимаю, как ясность вызывалась до того, как утверждение if было закончено.iterparse not getting children text

У меня есть файл 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> 

Я знаю, что это не имеет надлежащего стиль, но это, как мой сценарий получает это, так что я думал дать вам ребята всю картину , Файл в основном содержит сотни элементов <alarm> под элементом <root>.

Что я хочу сделать - это проанализировать файл с помощью 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() 

Но я получаю None в результате из child.text. Вот результат, который я получаю, когда запускаю скрипт:

Можете ли вы, ребята, дать мне руку с этим?

+0

код прекрасно работает со мной. 'Python 2.7.3'. –

ответ

0

Удалить заявление о возврате, и этот код работает нормально.

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()