代码之家  ›  专栏  ›  技术社区  ›  mpx

如何在python中从Elementtree访问great孙子元素[[副本]

  •  0
  • mpx  · 技术社区  · 6 年前

    我很难在python中使用元素树访问曾孙。 具体来说,我想访问Ev,Ec,St,DU和Si的树。完整的xml被附加在这个线程的底部。

    我尝试了以下代码,但没有返回任何结果。

    import xml.etree.ElementTree as ET
    tree = ET.parse('shhs_eval.xml')
    root = tree.getroot()
    for ScoreEvent in root.findall('Sco'):
        Event = ScoreEvent.find('Ev').text
        Start = ScoreEvent.find('St').text
        print(Event,Start)
    

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
        <PSG>
        <Sof>Compumedics</Sof>
        <Ep>30</Ep>
        <Scs>
        <Sco>
            <Ev>Arousal</Ev>
            <Ec>Arousal|Arousal ()</Ec>
            <St>8062.4</St>
            <Du>22.8</Du>
            <Si>EMG</Si>
        </Sco>
        <Sco>
            <Ev>N1</Ev>
            <Evc>wl|Aw ()</Evc>
            <St>8062.4</St>
            <Du>22.8</Du>
            <Si>EMG</Si>
        </Sco>
        </Scs>
        </PSG>
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   bitnahian    6 年前

    作为 <Sco> 不是根的直接子级,必须使用 findall(.//<node>) (深度优先搜索)。

    import xml.etree.ElementTree as ET
    tree = ET.parse('sshs_eval.xml')
    root = tree.getroot()
    for ScoreEvent in root.findall('.//Sco'):
        Event = ScoreEvent.find('Ev').text
        Start = ScoreEvent.find('St').text
        print(Event,Start)