Python XML-bestand – Lezen, schrijven en parseren
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.
Python stelt u in staat XML-documenten te ontleden en te wijzigen. Om het XML-document te kunnen parseren, moet u het volledige XML-document in het geheugen hebben. In deze tutorial zullen we zien hoe we de XML-minidomklasse kunnen gebruiken in Python om XML-bestanden te laden en te parseren.
XML parseren met minidom
We hebben een voorbeeld-XML-bestand gemaakt dat we gaan parseren.
Stap 1) Maak een voorbeeld-XML-bestand
In het bestand kunnen we de voornaam, achternaam, huis en het expertisegebied zien (SQL, Python, Testen en ondernemen)
Stap 2) Gebruik de parse-functie om het XML-bestand te laden en te parseren
Nadat we het document hebben geparseerd, printen we het “knooppuntnaam” van de hoofdmap van het document en de “eerste onderliggende tagnaam”. Tagnaam en knooppuntnaam zijn de standaardeigenschappen van het XML-bestand.
- Importeer de module xml.dom.minidom en declareer het bestand dat moet worden geparseerd (myxml.xml)
- Dit bestand bevat basisinformatie over een 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 een variabele doc en doc krijgt het resultaat van de parse-functie
- We willen de knooppuntnaam en de onderliggende tagnaam uit het bestand afdrukken, dus declareren we deze in de afdrukfunctie
- Voer de code uit. De knooppuntnaam (#document) wordt afgedrukt uit het XML-bestand en de eerste onderliggende tagnaam (werknemer) uit het XML-bestand
Note:
Knooppuntnaam en onderliggende tagnaam zijn de standaardnamen of eigenschappen van een XML-dom.
Stap 3) Roep de lijst met XML-tags op uit het XML-document en print deze uit
Vervolgens kunnen we ook de lijst met XML-tags uit het XML-document oproepen en afdrukken. Hier hebben we de reeks vaardigheden afgedrukt, zoals SQL, Python, Testen en zaken.
- Geef de variabele expertise op, waaruit we alle expertise gaan halen die de medewerker heeft
- Gebruik de dom-standaardfunctie genaamd “getElementsByTagName”
- Hiermee worden alle elementen met de naam vaardigheid verkregen
- Verklaar een lus over elk van de vaardigheidstags
- Voer de code uit. Het geeft een lijst met vier vaardigheden
Hoe XML-knooppunt te schrijven
We kunnen een nieuw attribuut maken door de functie “createElement” te gebruiken en dit nieuwe attribuut of deze tag vervolgens aan de bestaande XML-tags toe te voegen. We hebben een nieuwe tag “BigData” toegevoegd aan ons XML-bestand.
- U moet coderen om het nieuwe attribuut (BigData) aan de bestaande XML-tag toe te voegen
- Vervolgens moet u de XML-tag afdrukken met nieuwe attributen, toegevoegd aan de bestaande XML-tag
- Om een nieuwe XML toe te voegen en aan het document toe te voegen, gebruiken we code “doc.create elements”
- Deze code creëert een nieuwe vaardigheidstag voor ons nieuwe attribuut “Big-data”
- Voeg deze vaardigheidstag toe aan het document eerste kind (werknemer)
- Voer de code uit. De nieuwe tag 'big data' verschijnt bij de andere lijst met expertises
Voorbeeld van XML-parser
Python 2 Voorbeeld
import xml.dom.minidom def main(): # use the parse() function to load and parse an XML file doc = xml.dom.minidom.parse("Myxml.xml"); # print out the document node and the name of the first child tag print doc.nodeName print doc.firstChild.tagName # get a list of XML tags from the document and print each one expertise = doc.getElementsByTagName("expertise") print "%d expertise:" % expertise.length for skill in expertise: print skill.getAttribute("name") #Write a new XML tag and add it into the document newexpertise = doc.createElement("expertise") newexpertise.setAttribute("name", "BigData") doc.firstChild.appendChild(newexpertise) print " " 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(): # use the parse() function to load and parse an XML file doc = xml.dom.minidom.parse("Myxml.xml"); # print out the document node and the name of the first child tag print (doc.nodeName) print (doc.firstChild.tagName) # get a list of XML tags from the document and print each one expertise = doc.getElementsByTagName("expertise") print ("%d expertise:" % expertise.length) for skill in expertise: print (skill.getAttribute("name")) # Write a new XML tag and add it into the document newexpertise = doc.createElement("expertise") newexpertise.setAttribute("name", "BigData") doc.firstChild.appendChild(newexpertise) print (" ") expertise = doc.getElementsByTagName("expertise") print ("%d expertise:" % expertise.length) for skill in expertise: print (skill.getAttribute("name")) if __name__ == "__main__": main();
Hoe XML te 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:
<data> <items> <item name="expertise1">SQL</item> <item name="expertise2">Python</item> </items> </data>
XML lezen met ElementTree:
we moeten eerst de module xml.etree.ElementTree importeren.
import xml.etree.ElementTree as ET
Laten we nu het rootelement ophalen:
root = tree.getroot()
Hieronder staat de volledige code voor het lezen van bovenstaande xml-gegevens
import xml.etree.ElementTree as ET tree = ET.parse('items.xml') root = tree.getroot() # all items data print('Expertise Data:') for elem in root: for subelem in elem: print(subelem.text)
output:
Expertise Data: SQL Python
Samenvatting
Python stelt u in staat het gehele XML-document in één keer te ontleden en niet slechts één regel tegelijk. Om het XML-document te kunnen parseren, moet u het volledige document in het geheugen hebben.
- Om een XML-document te parseren
- Importeer xml.dom.minidom
- Gebruik de functie “parse” om het document te parseren ( doc=xml.dom.minidom.parse (bestandsnaam);
- Roep de lijst met XML-tags uit het XML-document op 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”