XML Parsen in Python: Praktische Gids met Minidom en ElementTree
Wat is XML?
XML, of eXtensible Markup Language, is gemaakt om gestructureerde data efficiënt op te slaan en te transporteren. Het wordt wijd gebruikt voor het uitwisselen van informatie tussen systemen en applicaties.
Python biedt robuuste bibliotheken voor het parsen en manipuleren van XML-documenten. Echter, om een XML-bestand te parsen, moet het hele document eerst in het geheugen geladen worden. In deze tutorial laten we zien hoe je Python's xml.dom.minidom en xml.etree.ElementTree modules kunt gebruiken om XML-bestanden te lezen, inspecteren en wijzigen.
Aan het einde van deze gids kun je:
- XML parsen met
minidom - Nieuwe XML-nodes aanmaken
- XML parsen met
ElementTree
XML Parsen met minidom
We beginnen met een voorbeeld-XML-bestand dat werknemersdata bevat. Het bestand ziet er zo uit:
Stap 1) Het bestand lijst een werknemers voornaam, achternaam, thuisadres en expertise-gebieden zoals SQL, Python, Testing en Business.

Stap 2) Na het laden van het document, printen we de nodeName van het root-element en de tagName van het eerste kind. Dit zijn standaard-eigenschappen van een DOM-object.

- Importeer
xml.dom.minidomen laad het XML-bestand (myxml.xml). - Parse het bestand met
parse()om een document-object te verkrijgen. - Haal de document's
nodeNameen de eerste kind'stagNameop en toon ze. - Gebruik
getElementsByTagName()om alleexpertiseelementen op te sommen en print elke skill.
Let op: De nodeName en tagName waarden volgen XML DOM naming conventions, wat onbekend kan zijn als je nieuw bent met XML.
Stap 3) We kunnen een lijst van alle skills uit het document halen. De volgende code demonstreert hoe de skill-namen in een set te verzamelen.

- Gebruik
getElementsByTagName("skill")om alle skill-elementen op te halen. - Itereer over de geretourneerde lijst en output elke skill's
nameattribuut.
Een Nieuwe XML-node Aanmaken
Nieuwe data toevoegen aan een bestaande XML-structuur is straightforward met minidom. In ons voorbeeld voegen we een nieuwe expertise node toe gelabeld "BigData".
- Maak het nieuwe element aan met
createElement("expertise")en zet hetnameattribuut. - Voeg het nieuwe element toe aan het root-kind van het document.

- Na invoeging bevat de
expertiselijst nu de nieuwe "BigData" skill.
XML Parser Voorbeeld
Python 2 Voorbeeld
import xml.dom.minidom
def main():
# Laad en parse het XML-bestand
doc = xml.dom.minidom.parse("Myxml.xml")
# Output root-informatie
print doc.nodeName
print doc.firstChild.tagName
# Lijst bestaande expertise-entries
expertise = doc.getElementsByTagName("expertise")
print "%d expertise:" % expertise.length
for skill in expertise:
print skill.getAttribute("name")
# Voeg een nieuwe expertise-entry toe
newexpertise = doc.createElement("expertise")
newexpertise.setAttribute("name", "BigData")
doc.firstChild.appendChild(newexpertise)
print " "
# Verifieer toevoeging
expertise = doc.getElementsByTagName("expertise")
print "%d expertise:" % expertise.length
for skill in expertise:
print skill.getAttribute("name")
if __name__ == "__main__":
main()
Python 3 Voorbeeld
import xml.dom.minidom
def main():
# Laad en parse het XML-bestand
doc = xml.dom.minidom.parse("Myxml.xml")
# Output root-informatie
print(doc.nodeName)
print(doc.firstChild.tagName)
# Lijst bestaande expertise-entries
expertise = doc.getElementsByTagName("expertise")
print("%d expertise:" % expertise.length)
for skill in expertise:
print(skill.getAttribute("name"))
# Voeg een nieuwe expertise-entry toe
newexpertise = doc.createElement("expertise")
newexpertise.setAttribute("name", "BigData")
doc.firstChild.appendChild(newexpertise)
print(" ")
# Verifieer toevoeging
expertise = doc.getElementsByTagName("expertise")
print("%d expertise:" % expertise.length)
for skill in expertise:
print(skill.getAttribute("name"))
if __name__ == "__main__":
main()
XML Parsen met ElementTree
ElementTree is een lichtgewicht API die XML-manipulatie simpel en Pythonic maakt. Het is ideaal voor het lezen van grote XML-bestanden zonder de overhead van een volledige DOM.
Onze voorbeeld-XML-data:
<data>
<items>
<item name="expertise1">SQL</item>
<item name="expertise2">Python</item>
</items>
</data>
XML Lezen met ElementTree:
Eerst, importeer de module:
import xml.etree.ElementTree as ET
Parse het bestand en verkrijg het root-element:
tree = ET.parse('items.xml')
root = tree.getroot()
Hier is de complete code om alle skill-namen te tonen:
import xml.etree.ElementTree as ET
tree = ET.parse('items.xml')
root = tree.getroot()
print('Expertise Data:')
for elem in root:
for subelem in elem:
print(subelem.text)
Output:
Expertise Data: SQL Python
Samenvatting
Python's xml.dom.minidom en xml.etree.ElementTree modules stellen ontwikkelaars in staat om XML-documenten efficiënt te laden, analyseren en wijzigen. Terwijl minidom een volledige DOM-representatie biedt geschikt voor complexe manipulaties, biedt ElementTree een lichtgewicht alternatief voor straightforward parsing en extractie.
- Laad XML met
parse()(bijv.doc = xml.dom.minidom.parse(bestand)). - Gebruik
getElementsByTagName()om elementen op te halen. - Maak en voeg nieuwe nodes toe met
createElement()enappendChild(). - Met ElementTree, itereer simpelweg over child-elementen om data te benaderen.
Python
- Python-bestands-I/O: bestandsbewerkingen, lezen, schrijven en beheer beheersen
- Python's strip()-methode beheersen: Uitgebreide handleiding & praktische voorbeelden
- Python len(): Praktische handleiding voor het meten van objectlengtes
- Python's yield meesteren: Generator vs Return – Een praktische gids
- Python Counter in collections – Efficiënt tellen, updaten en rekenkundige operaties
- Python's enumerate() meesteren: lussen met indices voor lijsten, tuples, strings en dictionaries
- Bestands- en directory-bestaat controleren in Python – Een praktische gids
- Python JSON: Encoding, Decoding en Bestandsafhandeling – Een Praktische Gids
- Python List index() – Elementposities Vinden met Praktische Voorbeelden
- Python Bestands I/O: In- en uitvoerbewerkingen onder de knie krijgen
- Bestanden Lezen in Java met BufferedReader – Een Praktische Gids met Voorbeelden