Latest web development tutorials

Python XML-Parsing

Was ist XML?

XML bedeutet Extensible Markup Language(e X tensible M arkup L anguage). Sie können über diese Seite erfahren XML Tutorial

XML ist so konzipiert und speichern Daten zu übertragen.

XML ist ein Satz von Regeln, die Semantik von Tags zu definieren, werden diese Tags in viele Teile geteilt dokumentieren und diese Teile zu identifizieren.

Es ist auch eine meta-Auszeichnungssprache, die die Syntax der Sprache zu definieren andere domänenspezifische, semantische, strukturierte Auszeichnungssprache verwendet wird, definiert.


Python für XML-Parsing

Gemeinsame DOM und XML-Programmierschnittstellen SAX, zwei verschiedene Schnittstellen mit XML-Dateien, die Art und Weise, natürlich, die Verwendung von verschiedenen Gelegenheiten.

Es gibt drei Möglichkeiten, Python Parsen von XML, SAX, DOM und ElementTree:

1.SAX (einfache API für XML)

Python-Standardbibliothek enthält SAX-Parser, SAX mit dem Modell ereignisgesteuert, ausgelöst durch ein Ereignis im Prozess der XML-Parsing und benutzerdefinierte Funktionen Callback-Aufruf von XML-Dateien zu verarbeiten.

2.DOM (Document Object Model)

Die XML-Daten werden in einen Baum im Speicher analysiert, durch den Baum-Betriebs XML zu manipulieren.

3.ElementTree (Element Baum)

ElementTree als leichte DOM, mit einer komfortablen und freundlichen API. -Code Verfügbarkeit, schnell und verbrauchen weniger Speicher.

Hinweis: Aufgrund der DOM müssen XML - Daten in den Speicher Baum auf der Karte, ein langsam, der zweite ist mehr Verbrauch von Speicher, SAX - Streaming liest schneller die XML - Datei, nehmen weniger Speicher, aber muss der Benutzer Rückruf zu implementieren (Handler ).

Verwenden Sie diesen Abschnitt in eine XML-Instanzdokument movies.xml lautet wie folgt:

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

Python XML-Parsing SAX mit

SAX ist ein ereignisgesteuertes API.

Verwenden Sie SAX ein XML-Dokument Parsen umfasst zwei Teile: den Parser und Event-Handler.

Der Parser ist verantwortlich für die XML-Dokumente zu lesen, und sendet Event-Handler Ereignis, wie Elemente mit dem Element-End-Ereignis beginnen;

Der Event-Handler ist für den Fall, demnach, XML-Datenübertragung für die Verarbeitung.

  • 1, wird die Verarbeitung von großen Dateien;
  • 2 ist nur ein Teil des Inhalts der Datei oder einfach bestimmte Informationen aus der Datei zu erhalten.
  • 3, wollen ihr eigenes Objektmodell der Zeit zu bauen.

Verwenden Sie sax Weise xml xml.sax zuerst in der Parsing-Funktion eingeführt, sowie die Content xml.sax.handler in Python.

Contentklassenmethode eingeführt

Zeichen (Inhalt) Methode

Der Zeitpunkt des Anrufs:

Vom Anfang der Zeile, bevor das Etikett zu erleben, ist es ein Zeichen, Content-Wert dieser Strings.

Von einem Etikett, ein Etikett vor der nächsten Begegnung, die Anwesenheit des Charakters, Content-Wert dieser Strings.

Von einem Etikett, bevor Sie einen Leitungsabschluss zu begegnen, das Vorhandensein von Zeichen, Content-Wert dieser Strings.

Tag kann der Anfang des Tags, kann es das Ende des Etiketts sein.

startdocument () -Methode

Dokumentation Anlauf aufgerufen.

endDocument () -Methode

Erreicht der Anruf das Ende des Dokuments Parsers.

start (Name, attrs) Methode

Rufen Sie begegnet XML-Start-Tag, Name ist der Name des Tags ist, ist attrs ein Wörterbuch Eigenschaft Wert-Tag.

Endelement (name) Methode

Anruf begegnet XML End-Tag.


make_parser Verfahren

Die folgende Methode erzeugt einen neuen Parser-Objekt und kehrt zurück.

xml.sax.make_parser( [parser_list] )

Parameter Beschreibung:

  • parser_list - optionaler Parameter, Parser Liste

Parser-Methode

Die folgende Methode erzeugt einen SAX-Parser und XML-Dokument analysieren:

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

Parameter Beschreibung:

  • xmlfile - XML - Dateinamen
  • Content - muss Gegenstand eines Content
  • Fehlerbehandler - Wenn dieser Parameter angegeben wird, muss ein Fehlerbehandler SAX Fehlerbehandler Objekt sein

parseString Verfahren

parseString Methode erstellt einen XML-Parser und XML-Zeichenfolge analysieren:

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

Parameter Beschreibung:

  • xmlString - XML - Zeichenfolge
  • Content - muss Gegenstand eines Content
  • Fehlerbehandler - Wenn dieser Parameter angegeben wird, muss ein Fehlerbehandler SAX Fehlerbehandler Objekt sein

Python-Parsing XML-Instanz

#!/usr/bin/python
# -*- coding: UTF-8 -*-

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

   # 元素开始事件处理
   def startElement(self, tag, attributes):
      self.CurrentData = tag
      if tag == "movie":
         print "*****Movie*****"
         title = attributes["title"]
         print "Title:", title

   # 元素结束事件处理
   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 = ""

   # 内容事件处理
   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__"):
   
   # 创建一个 XMLReader
   parser = xml.sax.make_parser()
   # turn off namepsaces
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)

   # 重写 ContextHandler
   Handler = MovieHandler()
   parser.setContentHandler( Handler )
   
   parser.parse("movies.xml")

Der obige Code wird wie folgt ausgeführt:

*****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

Komplette SAX - API - Dokumentation finden Sie in den Python SAX - APIs


Verwenden Sie xml.dom Parse-xml

Document Object Model (Document Object Model, bezeichnet als DOM), ist es eine vom W3C empfohlene Behandlung Extensible Markup Language-Standard-Programmierschnittstelle.

In einem DOM-Parser ein XML-Dokument, lesen Sie das gesamte Dokument auf einmal, alle Elemente des Dokuments gespeichert in einer Baumstruktur im Speicher zu analysieren, dann können Sie die DOM verwenden verschiedene Funktionen zur Verfügung zu stellen, um zu lesen oder das Dokument ändern Inhalt und Struktur modifiziert werden, den Inhalt der xML-Datei zu schreiben.

Python mit xml.dom.minidom XML-Dokument zu analysieren, sind Beispiele, wie folgt:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

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

# 使用minidom解析器打开 XML 文档
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
   print "Root element : %s" % collection.getAttribute("shelf")

# 在集合中获取所有电影
movies = collection.getElementsByTagName("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

Ergebnisse der obigen Verfahren sind wie folgt:

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

Vollständige DOM - API - Dokumentation finden Sie in der Python die DOM - APIs .