2017-03-28 11 views
0

Dies wird eine ziemlich lange Frage sein, da mein Problem sehr spezifisch ist und etwas Erklärung dafür so leid tut.Python - Datenanalyse der XML-Datei mit ElementTree

Ich habe eine XML-Datei, die mehrere 'spreekbeurten' enthält. Ich möchte den ganzen Text von den Spreekbeurten bekommen, das Problem ist, dass manche Spreekbeurten keine "Al-Gruppe" haben und manche tun. (siehe Code unten zum Beispiel Stück OFTHE XML-Datei)

<handelingen> 
     <spreekbeurt nieuw="ja"> 
     <spreker> 
      <voorvoegsels>De heer</voorvoegsels> 
      <naam> 
      <achternaam>Recourt</achternaam> 
      </naam> (<politiek>PvdA</politiek>):</spreker> 
     <tekst status="goed"> 
      <al-groep> 
       <al>Much</al> 
       <al>Very</al> 
       <al>Hungry</al> 
       <al>I am</al> 
       <al>Hello.</al> 
       </al-groep> 
      </tekst> 
      </spreekbeurt> 

     <spreekbeurt nieuw="nee"> 
     <spreker> 
      <voorvoegsels>De heer</voorvoegsels> 
      <naam> 
      <achternaam>Van Raak</achternaam> 
      </naam> (<politiek>SP</politiek>):</spreker> 
     <tekst status="goed"> 
      <al>Just one word</al> 
     </tekst> 
     </spreekbeurt> 

    </handelingen> 

Ich mag die spreker seinen ‚voorvoegsel‘ und ‚achternaaam‘ mit dem entsprechenden Text des Sprechers erhalten. Dazu schrieb ich den folgenden Code:

def extractingText(filepath): 
    #Checking the size to keep empty files (size = 0 bytes) out! 
    statsinfo = os.stat(filepath)  
    if int(statsinfo.st_size) == 0: 
     return None 

    tree = ET.parse(filepath) 
    root = tree.getroot() 
    #Hiermee kijken we naar handelingen (het gedeelte waar de gesproken stukken in staan) 
    for handelingen in root.iter('handelingen'): 
     spreekbeurt = [] 
     #Hiermee kijken we naar alle spreekbeuten van de personen 
     for spreekbeurt in handelingen.iter('spreekbeurt'): 
      achternaam = spreekbeurt.find('spreker/naam/achternaam').text 
      voorvoegsel = spreekbeurt.find('spreker/voorvoegsels').text 
      #Defining what the text is, sometimes it is withn an al-group and sometimes it isn't 
      text = spreekbeurt.find('tekst/al-groep/al') #<- TO FIX I SUPPOSE I NEED TO ADD A FOR LOOP HERE? 
      if text == None: 
       text = spreekbeurt.find('tekst/al') 
      #Zoals je ziet heb ik nu voor alle spreekbeurten een text gevonden 
      print text.text 

    return None 

Das Problem ist, dass, wenn die ‚spreekbeurt‘ enthält eine ‚al-Gruppe‘ ich nur die erste ‚al‘ erhalten, die in dem Beispiel ist ‚viel‘ und nicht all die anderen Worte. Wie stelle ich sicher, dass, wenn der "Spreekbeurt" einen enthält, ich den gesamten Text in den "al" -Aussagen und nicht nur den ersten auswähle?

Vielen Dank im Voraus!

Antwort

Verwandte Themen