次のようなノードを含む XML ファイルがあります。
<trkpt lat="-37.7944415" lon="144.9616159">
<ele>41.3681107</ele>
<time>2015-04-11T03:52:33.000Z</time>
<speed>3.9598</speed>
</trkpt>
lxml.etree.iterparse() を使用してツリーを繰り返し解析しています。各 trkpt 要素の子をループして、子ノードのテキスト値を出力したいと考えています。例えば
for event, element in etree.iterparse(infile, events=("start", "end")):
if element.tag == NAMESPACE + 'trkpt':
for child in list(element):
print child.text
問題は、この段階ではノードにテキストがないため、印刷の出力が「なし」になることです。
「print child.text」ステートメントを「print etree.tostring(child)」に置き換えることでこれを検証しました。出力は次のようになります
<ele/>
<time/>
<speed/>
ドキュメントによると、「要素のテキスト、テール、および子は、開始イベントを受け取ったときにまだ存在しているとは限らないことに注意してください。要素が完全に解析されたことを保証するのは、終了イベントだけです。」
したがって、for ループをこれに変更しました。'if event == "end":' ステートメントに注意してください。
for event, element in etree.iterparse(infile, events=("start", "end")):
if element.tag == NAMESPACE + 'trkpt':
if event == "end":
for child in list(element):
print child.text
しかし、私はまだ同じ結果を得ています。どんな助けでも大歓迎です。