我有这个XML文件 我需要以与XML文件中相同的顺序读取Sync和Event中的值。
<Episode>
<Section type="report" startTime="0" endTime="263.035">
<Turn startTime="0" endTime="4.844" speaker="spk1">
<Sync time="0"/>
aaaaa
</Turn>
<Turn speaker="spk2" startTime="4.844" endTime="15.531">
<Sync time="4.844"/>
bbbbb
<Event desc="poz" type="noise" extent="begin"/>
ccccc
<Event desc="poz" type="noise" extent="end"/>
ddddd
<Sync time="12.210"/>
eeeee
</Turn>
<Turn speaker="spk1" startTime="15.531" endTime="17.549">
<Event desc="poz" type="noise" extent="begin"/>
fffff
</Turn>
</Section>
</Episode>
我需要这个输出:
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
有什么解决方案吗?谢谢。
答案 0 :(得分:0)
使用builtin sax解析器:
from xml import sax
class EpisodeContentHandler(sax.ContentHandler):
def characters(self, content):
content = content.strip()
if content:
print content
with open("Episode.xml") as f:
sax.parse(f, EpisodeContentHandler())
答案 1 :(得分:0)
除非你以某种方式限制使用Minidom,否则请尝试使用Martijn建议的'ElementTree'。根据我的个人经验,它更容易使用。你可以找到它的文档here
对于您的问题,您可以尝试这样的事情:
import xml.etree.ElementTree as ET
# Get the tree structure of the XML
tree = ET.parse("data.xml")
# Get the root/first tag in the tree
root = tree.getroot()
# Ge all elements with interesting tags
for child in root.findall("Sync"):
print child.text
旁注:child.attrib
是所有标签属性的映射。
答案 2 :(得分:0)
如果你坚持使用minidom:
elements = minidom.parseString(xml).getElementsByTagName('*') # where xml is your input xml
for el in elements:
if el.localName == 'Sync' or el.localName == 'Event':
print el.nextSibling.nodeValue.strip()
这将打印:
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff