編集:それを機能させる方法を見つけました。elem.clear()
以下のコードに表示されていない呼び出しがあったことがわかりました。申し訳ありません。様子が分かるように修正しました。その呼び出しをifステートメント内に移動すると、問題が解決したことがわかりました。しかし、if ステートメントが終了する前に clear がどのように呼び出されたかはまだわかりません。
次のような 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
ます。スクリプトを実行したときに得られる出力は次のとおりです。
[big@bang src]$ ./parse_xml.py
event: end
alarm_id None
site None
event_time None
cease_time None
problem_text None
これで手を貸してくれませんか?