Cannot loop through XML with Python (ElementTree API)

Question:

Followed the tutorial of ElementTree in Python Docs

And used their example XML to loop through the elements:

import xml.etree.ElementTree as ET

tree = ET.parse('Country.xml')
root = tree.getroot()

for country in root.findall('country'):
    print("FOUND")

Result
    FOUND
    FOUND
    FOUND

Their XML-file is as followed:

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>

I tried to replicate the result with my own XML-file:

tree = ET.parse('Test.xml')
root = tree.getroot()



for page in root.findall('page'):
    print("FOUND")

But unfortunately it won’t print "FOUND" and no error is given.

The expected result should be 1 "FOUND", because there is only 1 page-element present in my XML.

This is my XML-file:

<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns_xsi="http://www.w3.org/2001/XMLSchema-instance" xsi_schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml_lang="nl">
      <siteinfo>
        <sitename>Wikipedia</sitename>
        <dbname>nlwiki</dbname>
        <base>https://nl.wikipedia.org/wiki/Hoofdpagina</base>
        <generator>MediaWiki 1.40.0-wmf.3</generator>
        <case>first-letter</case>
        <namespaces>
          <namespace key="-2" case="first-letter">Media</namespace>
          <namespace key="-1" case="first-letter">Speciaal</namespace>
          <namespace key="0" case="first-letter" />
          <namespace key="1" case="first-letter">Overleg</namespace>
          <namespace key="2" case="first-letter">Gebruiker</namespace>
          <namespace key="3" case="first-letter">Overleg gebruiker</namespace>
          <namespace key="4" case="first-letter">Wikipedia</namespace>
          <namespace key="5" case="first-letter">Overleg Wikipedia</namespace>
          <namespace key="6" case="first-letter">Bestand</namespace>
          <namespace key="7" case="first-letter">Overleg bestand</namespace>
          <namespace key="8" case="first-letter">MediaWiki</namespace>
          <namespace key="9" case="first-letter">Overleg MediaWiki</namespace>
          <namespace key="10" case="first-letter">Sjabloon</namespace>
          <namespace key="11" case="first-letter">Overleg sjabloon</namespace>
          <namespace key="12" case="first-letter">Help</namespace>
          <namespace key="13" case="first-letter">Overleg help</namespace>
          <namespace key="14" case="first-letter">Categorie</namespace>
          <namespace key="15" case="first-letter">Overleg categorie</namespace>
          <namespace key="100" case="first-letter">Portaal</namespace>
          <namespace key="101" case="first-letter">Overleg portaal</namespace>
          <namespace key="710" case="first-letter">TimedText</namespace>
          <namespace key="711" case="first-letter">TimedText talk</namespace>
          <namespace key="828" case="first-letter">Module</namespace>
          <namespace key="829" case="first-letter">Overleg module</namespace>
          <namespace key="2300" case="case-sensitive">Uitbreiding</namespace>
          <namespace key="2301" case="case-sensitive">Overleg uitbreiding</namespace>
          <namespace key="2302" case="case-sensitive">Uitbreidingsdefinitie</namespace>
          <namespace key="2303" case="case-sensitive">Overleg uitbreidingsdefinitie</namespace>
        </namespaces>
      </siteinfo>
      <page>
        <title>Acteur</title>
        <ns>0</ns>
        <id>17</id>
        <revision>
          <id>62684862</id>
          <parentid>62333678</parentid>
          <timestamp>2022-08-28T17:43:03Z</timestamp>
          <contributor>
            <ip>2A02:1811:527:A800:A101:3A69:E8FE:7ECF</ip>
          </contributor>
          <comment>/* Speltechniek */</comment>
          <model>wikitext</model>
          <format>text/x-wiki</format>
          <text bytes="3257" xml_space="preserve">{{Infobox beroep
    | beroep       = Acteur
    | afbeelding   = Antoine Watteau - The Italian Comedians - Google Art Project.jpg
    | onderschrift = Acteurs van de [[Commedia dell'arte]] ([[Jean Antoine Watteau|Antoine Watteau]])
    | ISCO-08      = 2655
    | werksoort    = 
    | niveau       = [[Hoger beroepsonderwijs|Hbo]] / acad.
    | klasse       = 
    | groep        =
    | beoefenaars  = 
    | website      =
    }}
    Een '''acteur''' of '''actrice''' is iemand die een [[personage]] uitbeeldt in een verhaal of rollenspel.
    
    Een acteur kan zijn werk doen in een [[Theater (kunstvorm)|theatervoorstelling]] (theateracteur) of [[film (cinematografie)|film]] ([[filmacteur]]), op [[televisieprogramma|televisie]], tijdens [[communicatietraining]]en als [[trainingsacteur]] en hij kan als zijn stem lenen aan tekenfilmfiguren en reclameboodschappen ([[stemacteur]]). Acteurs kunnen ook een personage in een [[computerspel]] uitbeelden, of als simulatiemodel hiervoor worden ingezet waarna deze [[renderen|gerenderd]] worden. Elk van deze disciplines vereist een eigen techniek.
    
    Een acteur kan lijken op zijn personage, maar kan er ook in allerlei opzichten van verschillen - zelfs in [[leeftijd]] of [[sekse]]. Een acteur kan voor zijn rol sommige lichamelijke aspecten moeten aannemen, zoals bijvoorbeeld kapsel, gezichtsbeharing of lichaamsomvang. Met [[schmink]] of siliconenmasker kan een andere gelaatsuitdrukking of zelfs een ander gelaat worden aangenomen, met een [[pruik]] kan de haardracht worden aangepast.
    
    == Speltechniek ==
    Een acteur kan een rol neerzetten vanuit verschillende benaderingen: bijvoorbeeld door 'in de huid te kruipen' van het personage, of met [[methodacting]] waarbij de speler [[Emotie|emoties]] uit eigen ervaring naar boven haalt.
    
    == Vorming ==
    Acteurs leren meerdere speelvormen te beheersen, maar toch kan een bepaald soort rol of genre meer passend zijn bij het karakter of uitstraling van de speler. Soms is het nodig dat een acteur meerdere disciplines beheerst, afhankelijk van zijn rol; zo zijn voor [[musical]] en [[opera (muziek)|opera]] er ook muzikale vereisten.
    
    Voor amateurspelers zijn er creativiteitscentra die acteerlessen aanbieden. Toneelverenigingen en productiehuizen huren soms spelregisseurs in en doen soms aan extra scholing voor de spelers. Voor het leren van het acteursvak zijn er theateracademies.
    
    == Acteren als beroep ==
    Acteurs kunnen worden gevraagd voor een rol (rechtstreeks of via manager/managementbureau) of ze kunnen solliciteren op een vacature, waarna een [[auditie]] volgt. Een selectieprocedure kan bestaan uit een [[screentest]] waarbij voor een of meer rollen uit verschillende kandidaten wordt gekozen. Een [[casting]]director zorgt voor de invulling van de juiste acteurs bij een productie. 
    
    In de tweede helft van de twintigste eeuw waren tot circa 1980 de meeste toneelacteurs aangesloten bij een [[Theatergezelschap|toneelgezelschap]]. Sinds het verdwijnen van steeds meer van deze veelal gesubsidieerde ensembles en de opkomst van de veelal commerciƫle vrije producties, zijn de meeste beroepsacteurs onafhankelijk ([[freelance]]).
    
    == Zie ook ==
    {{Zusterproject klein
    | commons     = Category:Actors
    | wiktionary  = acteur
    }}
    *[[Stemacteur]]
    *[[Toneelschool]]
    *[[Figurant]]
    
    [[Categorie:Acteur| ]]</text>
          <sha1>ie9p91wsujy3th08266oodgixmjulz6</sha1>
        </revision>
      </page>
    </mediawiki>
Asked By: Nielsi_

||

Answers:

If I understood it well you want to print FOUND when a page tag is found in the XML. Your XML has a namespace so you need to add it to your search.

Code:

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
root = tree.getroot()

for country in root.findall('{*}page'):
    print("FOUND")

(test.xml is a copy of your example XML)

Output:

enter image description here

Answered By: Loxley
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.