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
Python - XML-verwerking
Vorige paginaVolgende pagina

XML is een draagbare, open source-taal waarmee programmeurs applicaties kunnen ontwikkelen die door andere applicaties kunnen worden gelezen, ongeacht het besturingssysteem en/of de ontwikkelingstaal.

Wat is XML?

De Extensible Markup Language (XML) is een opmaaktaal die veel lijkt op HTML of SGML. Dit wordt aanbevolen door het World Wide Web Consortium en is beschikbaar als open standaard.

XML is uitermate handig voor het bijhouden van kleine tot middelgrote hoeveelheden gegevens zonder dat een op SQL gebaseerde backbone nodig is.

XML-parserarchitecturen en API's

De Python-standaardbibliotheek biedt een minimale maar nuttige set interfaces om met XML te werken.

De twee meest elementaire en meest gebruikte API's voor XML-gegevens zijn de SAX- en DOM-interfaces.

  • Eenvoudige API voor XML (SAX) − Hier registreert u terugbelverzoeken voor interessante gebeurtenissen en laat u de parser vervolgens het document doorlopen. Dit is handig als uw documenten groot zijn of als u geheugenbeperkingen heeft, het bestand wordt geparseerd terwijl het van de schijf wordt gelezen en het volledige bestand nooit in het geheugen wordt opgeslagen.

  • Document Object Model (DOM) API − Dit is een aanbeveling van het World Wide Web Consortium waarbij het hele bestand in het geheugen wordt ingelezen en in een hiërarchische (op boomstructuur gebaseerde) vorm wordt opgeslagen om alle kenmerken van een XML-document weer te geven.

SAX kan informatie natuurlijk niet zo snel verwerken als DOM kan bij het werken met grote bestanden. Aan de andere kant kan het uitsluitend gebruiken van DOM je bronnen echt vernietigen, vooral als het wordt gebruikt voor veel kleine bestanden.

SAX is alleen-lezen, terwijl DOM wijzigingen in het XML-bestand toestaat. Aangezien deze twee verschillende API's elkaar letterlijk aanvullen, is er geen reden waarom je ze niet allebei voor grote projecten zou kunnen gebruiken.

Laten we voor al onze XML-codevoorbeelden een eenvoudig XML-bestand gebruiken movies.xml als invoer −

 Oorlog, Thriller DVD 2003 PG 10 Praat over een oorlog tussen de VS en Japan Anime, Science Fiction DVD 1989 R 8 Een wetenschappelijke fictie  Anime, actie DVD 4 PG 10 Vash the Stampede! Komedie VHS PG  2 Zichtbare verveling

XML ontleden met SAX API's

SAX is een standaardinterface voor gebeurtenisgestuurde XML-parsing. Voor het parseren van XML met SAX moet u over het algemeen uw eigen ContentHandler maken door xml.sax.ContentHandler te subclasseren.

Uw ContentHandler behandelt de specifieke tags en attributen van uw smaak(en) van XML. Een ContentHandler-object biedt methoden om verschillende parseergebeurtenissen af ​​te handelen. De eigenaar van de parser roept ContentHandler-methoden aan terwijl het het XML-bestand ontleedt.

De methoden startDocument en endDocument worden aan het begin en het einde van het XML-bestand aangeroepen. De methode characters(text) worden karaktergegevens van het XML-bestand doorgegeven via de parametertekst.

De ContentHandler wordt aan het begin en einde van elk element aangeroepen. Als de parser niet in de naamruimtemodus staat, worden de methoden startElement(tag, attributes) en endElement(tag) worden genoemd; anders, de corresponderende methoden startElementNS en endElementNS worden genoemd. Hier is tag de elementtag en attributen is een Attributen-object.

Hier zijn andere belangrijke methoden die u moet begrijpen voordat u verder gaat −

De make_parser Methode

Met de volgende methode wordt een nieuw parser-object gemaakt en geretourneerd. Het gemaakte parserobject is van het eerste parsertype dat het systeem vindt.

xml.sax.make_parser( [parser_list] )

Hier is het detail van de parameters −

  • parser_list − Het optionele argument dat bestaat uit een lijst met te gebruiken parsers die allemaal de methode make_parser moeten implementeren.

De ontleding Methode

De volgende methode maakt een SAX-parser aan en gebruikt deze om een ​​document te ontleden.

xml.sax.parse(xmlfile, contenthandler[, errorhandler])

Hier is het detail van de parameters −

  • xml-bestand − Dit is de naam van het XML-bestand waaruit moet worden gelezen.

  • contenthandler − Dit moet een ContentHandler-object zijn.

  • foutbehandelaar − Indien gespecificeerd, moet errorhandler een SAX ErrorHandler-object zijn.

De parseString Methode

Er is nog een methode om een ​​SAX-parser te maken en de opgegeven XML-tekenreeks te ontleden .

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

Hier is het detail van de parameters −

  • xmlstring − Dit is de naam van de XML-tekenreeks waaruit moet worden gelezen.

  • contenthandler − Dit moet een ContentHandler-object zijn.

  • foutbehandelaar − Indien gespecificeerd, moet errorhandler een SAX ErrorHandler-object zijn.

Voorbeeld

#!/usr/bin/pythonimport xml.saxclass MovieHandler( xml.sax.ContentHandler):def __init__(self):self.CurrentData ="" self .type ="" self.format ="" self.year ="" self.rating ="" self.stars ="" self.description ="" # Roep wanneer een element start def startElement(self, tag, attributes) :self.CurrentData =tag if tag =="movie":print "*****Movie*****" title =attributes["title"] print "Title:", title # Bel wanneer een element eindigt def endElement(self, tag):if self.CurrentData =="type":print "Type:", self.type elif self.CurrentData =="format":print "Format:", self.format elif self.CurrentData =="jaar":print "Year:", self.year elif self.CurrentData =="rating":print "Rating:", self.rating elif self.CurrentData =="stars":print "Stars:", self .stars elif self.CurrentData =="description":print "Description:", self.description self.CurrentData ="" # Roep wanneer een karakter wordt gelezen def characters(self, content):if self.Cu rrentData =="type":self.type =inhoud elif self.CurrentData =="format":self.format =inhoud elif self.CurrentData =="year":self.year =inhoud elif self.CurrentData =="rating ":self.rating =content elif self.CurrentData =="stars":self.stars =content elif self.CurrentData =="description":self.description =content if ( __name__ =="__main__"):# maak een XMLReader parser =xml.sax.make_parser() # zet namepsaces parser.setFeature(xml.sax.handler.feature_namespaces, 0) uit # overschrijf de standaard ContextHandler Handler =MovieHandler() parser.setContentHandler(Handler) parser.parse("movies" .xml")

Dit zou het volgende resultaat opleveren −

*****Film*****Titel:Enemy BehindType:Oorlog, ThrillerFormaat:DVDJaar:2003Beoordeling:PGStars:10Beschrijving:Praat over een oorlog tussen de VS en Japan*****Film *****Titel:TransformersType:Anime, Science FictionFormaat:DVDJaar:1989Beoordeling:RStars:8Beschrijving:Een wetenschappelijke fictie*****Film*****Titel:TrigunType:Anime, ActieFormaat:DVDBeoordeling:PGStars:10Beschrijving:Vash the Stampede!*****Film*****Titel:IshtarType:ComedyFormaat:VHSRering:PGStars:2Beschrijving:Zichtbare verveling

Raadpleeg de standaard Python SAX API's voor een volledig detail over SAX API-documentatie.

XML ontleden met DOM API's

Het Document Object Model ("DOM") is een meertalige API van het World Wide Web Consortium (W3C) voor het openen en wijzigen van XML-documenten.

De DOM is uitermate handig voor toepassingen met willekeurige toegang. Met SAX kunt u slechts één bit van het document tegelijk bekijken. Als je naar het ene SAX-element kijkt, heb je geen toegang tot het andere.

Dit is de gemakkelijkste manier om snel een XML-document te laden en een minidom-object te maken met behulp van de xml.dom-module. Het minidom-object biedt een eenvoudige parsermethode die snel een DOM-boom maakt van het XML-bestand.

De voorbeeldzin roept de functie parse( file [,parser] ) van het minidom-object aan om het XML-bestand dat door bestand is aangewezen, te ontleden in een DOM-boomobject.

#!/usr/bin/pythonfrom xml.dom.minidom import parseimport xml.dom.minidom# Open XML-document met minidom parserDOMTree =xml.dom.minidom.parse("movies.xml" )collection =DOMTree.documentElementif collection.hasAttribute("shelf"):print "Root element :%s" % collection.getAttribute("shelf")# Haal alle films op in collectionmovies =collection.getElementsByTagName("movie")# Print details van elke movie.for movie in movies:print "*****Movie*****" if movie.hasAttribute("title"):print "Title:%s" % movie.getAttribute("title" ) type =movie.getElementsByTagName('type')[0] print "Type:%s" % type.childNodes[0].data format =movie.getElementsByTagName('format')[0] print "Formaat:%s" % format.childNodes[0].data rating =movie.getElementsByTagName('rating')[0] print "Rating:%s" % rating.childNodes[0].data description =movie.getElementsByTagName('description')[0 ] print "Beschrijving:%s" % description.childNodes[0].data

Dit zou het volgende resultaat opleveren −

Rootelement:Nieuwkomers*****Film*****Titel:Enemy BehindType:War, ThrillerFormaat:DVDRating:PGDescription:Praten over een oorlog tussen de VS en Japan***** Film*****Titel:TransformersType:Anime, Science FictionFormaat:DVDRating:RBeschrijving:Een wetenschappelijke fictie*****Film*****Titel:TrigunType:Anime, ActionFormaat:DVDRating:PGBeschrijving:Vash the Stampede!* ****Film*****Titel:IshtarType:ComedyFormaat:VHSRating:PGDescription:Zichtbare verveling

Raadpleeg de standaard Python DOM API's voor een volledig detail over DOM API-documentatie.


Python

  • C Taal
  •   
  • VHDL
  •   
  • Verilog
  •   
  • MATLAB
  •   
  • Python
  •   
  • Java
    1. Python Print()-verklaring:afdrukken met voorbeelden
    2. Python-gegevensklasse:een betere manier om gegevens op te slaan
    3. Python datetime
    4. Python-snaren:vervangen, samenvoegen, splitsen, omkeren, hoofdletters en kleine letters
    5. Python - E-mail verzenden met SMTP
    6. Python-operator overbelast