Python XML Parser-zelfstudie: voorbeeld van XML-bestand lezen (Minidom, ElementTree)

Inhoudsopgave:

Anonim

Wat is XML?

XML staat voor eXtensible Markup Language. Het is ontworpen om kleine tot middelgrote hoeveelheden gegevens op te slaan en te transporteren en wordt veel gebruikt voor het delen van gestructureerde informatie.

Met Python kunt u XML-documenten parseren en wijzigen. Om een ​​XML-document te kunnen ontleden, moet u het volledige XML-document in het geheugen hebben. In deze zelfstudie zullen we zien hoe we de XML-minidom-klasse in Python kunnen gebruiken om een ​​XML-bestand te laden en te parseren.

In deze tutorial zullen we leren-

  • XML parseren met minidom
  • XML-knooppunt maken
  • XML parseren met ElementTree

XML parseren met minidom

We hebben een XML-voorbeeldbestand gemaakt dat we gaan ontleden.

Stap 1) In het bestand kunnen we voornaam, achternaam, huis en het vakgebied (SQL, Python, Testing en Business) zien

Stap 2) Nadat we het document hebben geparseerd, zullen we de "knooppuntnaam" van de root van het document en de " firstchild tagname" afdrukken . Tagname en nodename zijn de standaardeigenschappen van het XML-bestand.

  • Importeer de xml.dom.minidom module en declareer het bestand dat geparseerd moet worden (myxml.xml)
  • Dit bestand bevat wat basisinformatie over de werknemer, zoals voornaam, achternaam, huis, expertise, enz.
  • We gebruiken de parse-functie op de XML-minidom om het XML-bestand te laden en te parseren
  • We hebben variabele doc en doc krijgt het resultaat van de parse-functie
  • We willen de naam van het knooppunt en de naam van het kind uit het bestand afdrukken, dus we declareren het in de afdrukfunctie
  • Voer de code uit - Het drukt de knooppuntnaam (#document) uit het XML-bestand en de eerste kindnaam (werknemer) uit het XML-bestand

Opmerking :

Nodename en child tagname zijn de standaardnamen of eigenschappen van een XML-dom. In het geval dat u niet bekend bent met dit soort naamgevingsconventies.

Stap 3) We kunnen de lijst met XML-tags ook oproepen vanuit het XML-document en uitgeprint. Hier hebben we de reeks vaardigheden afgedrukt, zoals SQL, Python, Testen en Business.

  • Geef de variabele expertise aan, waaruit we alle expertise gaan halen die de naam medewerker heeft
  • Gebruik de dom-standaardfunctie genaamd "getElementsByTagName"
  • Dit krijgt alle elementen met de naam vaardigheid
  • Verklaar een lus over elk van de vaardigheidstags
  • Voer de code uit - Het geeft een lijst met vier vaardigheden

XML-knooppunt maken

We kunnen een nieuw attribuut maken door de functie "createElement" te gebruiken en dit nieuwe attribuut of tag aan de bestaande XML-tags toevoegen. We hebben een nieuwe tag "BigData" toegevoegd aan ons XML-bestand.

  1. U moet coderen om het nieuwe attribuut (BigData) aan de bestaande XML-tag toe te voegen
  2. Vervolgens moet u de XML-tag afdrukken met nieuwe attributen die zijn toegevoegd aan de bestaande XML-tag
  • Om een ​​nieuwe XML toe te voegen en deze aan het document toe te voegen, gebruiken we code "doc.create elements"
  • Met deze code wordt een nieuwe vaardigheidstag gemaakt voor ons nieuwe kenmerk 'Big-data'
  • Voeg deze vaardigheidstag toe aan het document eerste kind (werknemer)
  • Voer de code uit - de nieuwe tag "big data" zal verschijnen bij de andere lijst met expertises

XML Parser-voorbeeld

Python 2-voorbeeld

importeer xml.dom.minidomdef hoofd ():# gebruik de functie parse () om een ​​XML-bestand te laden en te ontledendoc = xml.dom.minidom.parse ("Myxml.xml");# print het documentknooppunt en de naam van de eerste onderliggende tagprint doc.nodeNameprint doc.firstChild.tagName# haal een lijst met XML-tags uit het document en druk ze allemaal afexpertise = doc.getElementsByTagName ("expertise")print "% d expertise:"% expertise.lengthvoor vaardigheid in expertise:print skill.getAttribute ("naam")# maak een nieuwe XML-tag en voeg deze toe aan het documentnewexpertise = doc.createElement ("expertise")newexpertise.setAttribute ("naam", "BigData")doc.firstChild.appendChild (nieuwe expertise)afdrukken ""expertise = doc.getElementsByTagName ("expertise")print "% d expertise:"% expertise.lengthvoor vaardigheid in expertise:print skill.getAttribute ("naam")if name == "__main__":hoofd();

Python 3-voorbeeld

importeer xml.dom.minidomdef hoofd ():# gebruik de functie parse () om een ​​XML-bestand te laden en te ontledendoc = xml.dom.minidom.parse ("Myxml.xml");# print het documentknooppunt en de naam van de eerste onderliggende tagprint (doc.nodeName)afdrukken (doc.firstChild.tagName)# haal een lijst met XML-tags uit het document en druk ze allemaal afexpertise = doc.getElementsByTagName ("expertise")print ("% d expertise:"% expertise.length)voor vaardigheid in expertise:print (skill.getAttribute ("naam"))# maak een nieuwe XML-tag en voeg deze toe aan het documentnewexpertise = doc.createElement ("expertise")newexpertise.setAttribute ("naam", "BigData")doc.firstChild.appendChild (nieuwe expertise)print ("")expertise = doc.getElementsByTagName ("expertise")print ("% d expertise:"% expertise.length)voor vaardigheid in expertise:print (skill.getAttribute ("naam"))if __name__ == "__main__":hoofd();

XML parseren met ElementTree

ElementTree is een API voor het manipuleren van XML. ElementTree is de gemakkelijke manier om XML-bestanden te verwerken.

We gebruiken het volgende XML-document als voorbeeldgegevens:

SQLPython

XML lezen met ElementTree:

we moeten eerst de xml.etree.ElementTree-module importeren.

import xml.etree.ElementTree as ET

Laten we nu het root-element ophalen:

root = tree.getroot()

Hieronder volgt de volledige code voor het lezen van bovenstaande xml-gegevens

import xml.etree.ElementTree as ETtree = ET.parse('items.xml')root = tree.getroot()# all items dataprint('Expertise Data:')for elem in root:for subelem in elem:print(subelem.text)
output:
Expertise Data:SQLPython

Overzicht:

Met Python kunt u het volledige XML-document in één keer parseren en niet slechts één regel tegelijk. Om een ​​XML-document te kunnen ontleden, moet u het volledige document in het geheugen hebben.

  • Om XML-document te ontleden
    • Importeer xml.dom.minidom
    • Gebruik de functie "parse" om het document te ontleden (doc = xml.dom.minidom.parse (bestandsnaam);
    • Roep de lijst met XML-tags op vanuit het XML-document met behulp van code (= doc.getElementsByTagName ("naam van xml-tags")
  • Om een ​​nieuw attribuut in een XML-document te maken en toe te voegen
    • Gebruik de functie "createElement"