Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

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.

XML Parsen in Python: Praktische Gids met Minidom en ElementTree

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.

XML Parsen in Python: Praktische Gids met Minidom en ElementTree

  • Importeer xml.dom.minidom en laad het XML-bestand (myxml.xml).
  • Parse het bestand met parse() om een document-object te verkrijgen.
  • Haal de document's nodeName en de eerste kind's tagName op en toon ze.
  • Gebruik getElementsByTagName() om alle expertise elementen 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.

XML Parsen in Python: Praktische Gids met Minidom en ElementTree

  • Gebruik getElementsByTagName("skill") om alle skill-elementen op te halen.
  • Itereer over de geretourneerde lijst en output elke skill's name attribuut.

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".

  1. Maak het nieuwe element aan met createElement("expertise") en zet het name attribuut.
  2. Voeg het nieuwe element toe aan het root-kind van het document.

XML Parsen in Python: Praktische Gids met Minidom en ElementTree

  • Na invoeging bevat de expertise lijst 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() en appendChild().
  • Met ElementTree, itereer simpelweg over child-elementen om data te benaderen.

Python

  1. Python-bestands-I/O: bestandsbewerkingen, lezen, schrijven en beheer beheersen
  2. Python's strip()-methode beheersen: Uitgebreide handleiding & praktische voorbeelden
  3. Python len(): Praktische handleiding voor het meten van objectlengtes
  4. Python's yield meesteren: Generator vs Return – Een praktische gids
  5. Python Counter in collections – Efficiënt tellen, updaten en rekenkundige operaties
  6. Python's enumerate() meesteren: lussen met indices voor lijsten, tuples, strings en dictionaries
  7. Bestands- en directory-bestaat controleren in Python – Een praktische gids
  8. Python JSON: Encoding, Decoding en Bestandsafhandeling – Een Praktische Gids
  9. Python List index() – Elementposities Vinden met Praktische Voorbeelden
  10. Python Bestands I/O: In- en uitvoerbewerkingen onder de knie krijgen
  11. Bestanden Lezen in Java met BufferedReader – Een Praktische Gids met Voorbeelden