Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

Python - XML-Verarbeitung

Vorherige SeiteNächste Seite

XML ist eine portable Open-Source-Sprache, die es Programmierern ermöglicht, Anwendungen zu entwickeln, die von anderen Anwendungen gelesen werden können, unabhängig von Betriebssystem und/oder Entwicklungssprache.

Was ist XML?

Die Extensible Markup Language (XML) ist eine Auszeichnungssprache ähnlich wie HTML oder SGML. Dies wird vom World Wide Web Consortium empfohlen und ist als offener Standard verfügbar.

XML ist äußerst nützlich, um kleine bis mittlere Datenmengen zu verfolgen, ohne dass ein SQL-basiertes Backbone erforderlich ist.

XML-Parser-Architekturen und APIs

Die Python-Standardbibliothek bietet einen minimalen, aber nützlichen Satz von Schnittstellen für die Arbeit mit XML.

Die zwei grundlegendsten und am weitesten verbreiteten APIs für XML-Daten sind die SAX- und DOM-Schnittstellen.

Offensichtlich kann SAX Informationen nicht so schnell verarbeiten wie DOM, wenn es mit großen Dateien arbeitet. Andererseits kann die ausschließliche Verwendung von DOM Ihre Ressourcen wirklich vernichten, besonders wenn es für viele kleine Dateien verwendet wird.

SAX ist schreibgeschützt, während DOM Änderungen an der XML-Datei zulässt. Da sich diese beiden verschiedenen APIs buchstäblich ergänzen, gibt es keinen Grund, warum Sie sie nicht beide für große Projekte verwenden können.

Verwenden wir für alle unsere XML-Codebeispiele eine einfache XML-Datei movies.xml als Eingabe −

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
   <movie title="Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

XML mit SAX-APIs parsen

SAX ist eine Standardschnittstelle für ereignisgesteuertes XML-Parsing. Das Analysieren von XML mit SAX erfordert im Allgemeinen, dass Sie Ihren eigenen ContentHandler erstellen, indem Sie xml.sax.ContentHandler.

unterklassen

Ihr ContentHandler handhabt die besonderen Tags und Attribute Ihrer XML-Variante(n). Ein ContentHandler-Objekt stellt Methoden bereit, um verschiedene Parsing-Ereignisse zu behandeln. Sein besitzender Parser ruft ContentHandler-Methoden auf, während er die XML-Datei parst.

Die Methoden startDocument und endDocument werden am Anfang und am Ende der XML-Datei aufgerufen. Die Methode characters(text) werden über den Parameter text.

Zeichendaten der XML-Datei übergeben

Der ContentHandler wird am Anfang und am Ende jedes Elements aufgerufen. Befindet sich der Parser nicht im Namespace-Modus, werden die Methoden startElement(tag, attributes) und endElement(tag) werden genannt; andernfalls die entsprechenden Methoden startElementNS und endElementNS werden genannt. Hier ist Tag das Element-Tag und Attribute ein Attributes-Objekt.

Hier sind weitere wichtige Methoden, die Sie verstehen sollten, bevor Sie fortfahren −

Der make_parser Methode

Die folgende Methode erstellt ein neues Parser-Objekt und gibt es zurück. Das erstellte Parser-Objekt ist der erste Parser-Typ, den das System findet.

xml.sax.make_parser( [parser_list] )

Hier ist das Detail der Parameter −

Die Analyse Methode

Die folgende Methode erstellt einen SAX-Parser und verwendet ihn zum Parsen eines Dokuments.

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

Hier ist das Detail der Parameter −

Der parseString Methode

Es gibt noch eine weitere Methode, um einen SAX-Parser zu erstellen und den angegebenen XML-String zu parsen .

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

Hier ist das Detail der Parameter −

Beispiel

#!/usr/bin/python

import xml.sax

class MovieHandler( xml.sax.ContentHandler ):
   def __init__(self):
      self.CurrentData = ""
      self.type = ""
      self.format = ""
      self.year = ""
      self.rating = ""
      self.stars = ""
      self.description = ""

   # Call when an element starts
   def startElement(self, tag, attributes):
      self.CurrentData = tag
      if tag == "movie":
         print "*****Movie*****"
         title = attributes["title"]
         print "Title:", title

   # Call when an elements ends
   def endElement(self, tag):
      if self.CurrentData == "type":
         print "Type:", self.type
      elif self.CurrentData == "format":
         print "Format:", self.format
      elif self.CurrentData == "year":
         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 = ""

   # Call when a character is read
   def characters(self, content):
      if self.CurrentData == "type":
         self.type = content
      elif self.CurrentData == "format":
         self.format = content
      elif self.CurrentData == "year":
         self.year = content
      elif self.CurrentData == "rating":
         self.rating = content
      elif self.CurrentData == "stars":
         self.stars = content
      elif self.CurrentData == "description":
         self.description = content
  
if ( __name__ == "__main__"):
   
   # create an XMLReader
   parser = xml.sax.make_parser()
   # turn off namepsaces
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)

   # override the default ContextHandler
   Handler = MovieHandler()
   parser.setContentHandler( Handler )
   
   parser.parse("movies.xml")

Dies würde folgendes Ergebnis erzeugen −

*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Stars: 10
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Stars: 2
Description: Viewable boredom

Ausführliche Informationen zur SAX-API-Dokumentation finden Sie unter Standard-Python-SAX-APIs.

XML mit DOM-APIs parsen

Das Document Object Model ("DOM") ist eine sprachübergreifende API des World Wide Web Consortium (W3C) für den Zugriff auf und die Änderung von XML-Dokumenten.

Das DOM ist äußerst nützlich für Anwendungen mit wahlfreiem Zugriff. Mit SAX können Sie jeweils nur einen Teil des Dokuments anzeigen. Wenn Sie sich ein SAX-Element ansehen, haben Sie keinen Zugriff auf ein anderes.

Hier ist der einfachste Weg, schnell ein XML-Dokument zu laden und ein Minidom-Objekt mit dem xml.dom-Modul zu erstellen. Das Minidom-Objekt bietet eine einfache Parser-Methode, die schnell einen DOM-Baum aus der XML-Datei erstellt.

Der Beispielsatz ruft die Funktion parse( file [,parser] ) des Minidom-Objekts auf, um die durch file bezeichnete XML-Datei in ein DOM-Baumobjekt zu parsen.

#!/usr/bin/python

from xml.dom.minidom import parse
import xml.dom.minidom

# Open XML document using minidom parser
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
   print "Root element : %s" % collection.getAttribute("shelf")

# Get all the movies in the collection
movies = collection.getElementsByTagName("movie")

# Print detail of each 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 "Format: %s" % format.childNodes[0].data
   rating = movie.getElementsByTagName('rating')[0]
   print "Rating: %s" % rating.childNodes[0].data
   description = movie.getElementsByTagName('description')[0]
   print "Description: %s" % description.childNodes[0].data

Dies würde zu folgendem Ergebnis führen −

Root element : New Arrivals
*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Rating: PG
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Rating: R
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Description: Viewable boredom

Ausführliche Informationen zur DOM-API-Dokumentation finden Sie unter Standard-Python-DOM-APIs.


Python

  1. Python-Datentypen
  2. Python-Operatoren
  3. Python-pass-Anweisung
  4. Python-Funktionsargumente
  5. Python-Wörterbuch
  6. Python-Iteratoren
  7. Python-Schließungen
  8. Python-Datetime
  9. Python-Schlaf()
  10. Python – Übersicht