【问题标题】:python xml parse (minidom)python xml解析(minidom)
【发布时间】:2014-01-27 20:35:55
【问题描述】:

我需要从此 XML 文件中读取数据。我不知道,我必须如何从这个 XML 文件中读取数据 aaaaa、bbbbb、ccccc、ddddd、eeeee、fffff 和 ggggg。

<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

有什么建议吗?谢谢。

【问题讨论】:

    标签: python xml minidom


    【解决方案1】:

    一种方法是获取每个Sync 节点的nextSibling

    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
    

    此外,您可以通过获取每个Sync 节点的tail 来获得与ElementTree 相同的结果:

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

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 2018-10-23
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      相关资源
      最近更新 更多