2014-01-27 6 views
1

Мне нужно прочитать данные из этого XML-файла. Я не знаю, как мне читать данные aaaaa, bbbbb, ccccc, ddddd, eeeee, fffff и ggggg из этого XML-файла.python xml parse (minidom)

<Episode> 
<Section type="report" startTime="0" endTime="10"> 
    <Turn startTime="0" endTime="2.284" speaker="spk1"> 
     <Sync time="0"/> 
     aaaaa 
     <Sync time="0.93"/> 
     bbbbb 
    </Turn> 
    <Turn speaker="spk2" startTime="2.284" endTime="6.458"> 
     <Sync time="2.284"/> 
     ccccc 
     <Sync time="3.75"/> 
     ddddd 
     <Sync time="4.911"/> 
     eeeee 
    </Turn> 
    <Turn speaker="spk3" startTime="6.458" endTime="10"> 
     <Sync time="6.458"/> 
     fffff 
     <Sync time="8.467"/> 
     ggggg 
    <Sync time="9.754"/> 

    </Turn> 
</Section> 
</Episode> 

Я пишу этот код:

# -*- coding: UTF-8-*- 

from xml.etree import ElementTree as ET 
import os 
from xml.dom import minidom 

dom = minidom.parse("aaa.trs") 

conference=dom.getElementsByTagName('Turn') 
for node in conference: 
    conf_name=node.getAttribute('speaker') 
    print conf_name 
    sync=node.getElementsByTagName('Sync') 
    for s in sync: 
     s_name=s.getAttribute('time') 
     print s_name 

результат:

sp1 
sp2 
sp3 

Но выход должен быть:

sp1 
aaaaa 
bbbbb 
sp2 
ccccc 
ddddd 
eeeee 
sp3 
fffff 
ggggg 

Любые предложения? Спасибо.

ответ

2

Один из способов получить nextSibling каждого Sync узла:

conference = dom.getElementsByTagName('Turn') 
for node in conference: 
    conf_name = node.getAttribute('speaker') 
    print conf_name 
    sync = node.getElementsByTagName('Sync') 
    for s in sync: 
     print s.nextSibling.nodeValue.strip() 

печатает:

spk1 
aaaaa 
bbbbb 
spk2 
ccccc 
ddddd 
eeeee 
spk3 
fffff 
ggggg 

Кроме того, вы можете достичь того же результата с ElementTree, получая tail каждого Sync узла :

tree = ET.parse("aaa.trs") 
for turn in tree.findall('.//Turn'): 
    print turn.attrib.get('speaker') 
    for sync in turn.findall('.//Sync'): 
     print sync.tail.strip() 

Надеюсь, что это помогает.

Смежные вопросы