Was ist XML?
XML bezieht sich auf eXtensible Markup Language. Auf dieser Website können Sie XML-Tutorials erlernen.
XML dient der Übertragung und Speicherung von Daten.
XML ist eine Reihe von Regeln, die semantisches Markup definieren, das ein Dokument in Komponenten unterteilt und diese Komponenten identifiziert.
Es ist auch eine Meta-Markup-Sprache, das heißt, sie definiert eine syntaktische Sprache zur Definition anderer semantischer und strukturierter Markup-Sprachen, die sich auf bestimmte Felder beziehen.
Python-Parsing von XML
Zu den gängigen XML-Programmierschnittstellen gehören DOM und SAX. Diese beiden Schnittstellen verarbeiten XML-Dateien auf unterschiedliche Weise, und natürlich sind auch die Verwendungsszenarien unterschiedlich.
Python verfügt über drei Methoden zum Parsen von XML, SAX, DOM und ElementTree:
1.SAX (einfache API für XML)
Pyhton-Standardbibliothek enthält den SAX-Parser SAX Mithilfe des ereignisgesteuerten Modells werden XML-Dateien verarbeitet, indem während des XML-Analyseprozesses nacheinander Ereignisse ausgelöst und benutzerdefinierte Rückruffunktionen aufgerufen werden.
2.DOM (Document Object Model)
Analysiert XML-Daten in einen Baum im Speicher und bearbeitet XML durch Bearbeiten des Baums.
3.ElementTree (Element Tree)
ElementTree ist wie ein leichtes DOM mit einer praktischen und benutzerfreundlichen API. Der Code ist gut benutzerfreundlich, schnell und verbraucht weniger Speicher.
Hinweis: Da DOM XML-Daten einem Baum im Speicher zuordnen muss, ist es relativ langsam und verbraucht mehr Speicher. Das SAX-Streaming-Lesen von XML-Dateien ist schneller und beansprucht weniger Speicher, erfordert jedoch die Implementierung der Rückruffunktion durch den Benutzer (Handler).
Der Inhalt der in diesem Kapitel verwendeten XML-Beispieldatei movies.xml lautet wie folgt:
< ;description>Sprechen Sie über einen Krieg zwischen den USA und Japan
< ;rating>R< ;/rating>
Python verwendet SAX zum Parsen von XML
SAX ist eine ereignisgesteuerte API.
Die Verwendung von SAX zum Parsen von XML-Dokumenten umfasst zwei Teile: den Parser und den Ereignishandler.
Der Parser ist für das Lesen des XML-Dokuments und das Senden von Ereignissen an den Ereignisprozessor verantwortlich, z. B. Elementstart- und Elementendeereignisse.
Der Ereignisprozessor ist für die Reaktion auf das Ereignis und die Weiterleitung verantwortlich Die XML-Daten werden verarbeitet.
1. Verarbeiten Sie große Dateien.
2. Benötigen Sie nur einen Teil der Datei oder benötigen Sie nur bestimmte Informationen aus der Datei.
3. Wenn Sie Ihr eigenes Objektmodell erstellen möchten.
Um Sax zum Verarbeiten von XML in Python zu verwenden, müssen Sie zunächst die Parse-Funktion in xml.sax und den ContentHandler in xml.sax.handler einführen.
Einführung in die ContentHandler-Klassenmethode
Zeichen(inhalt)-Methode
Aufrufzeitpunkt:
Beginnend mit der Zeile, bevor auf die Beschriftung gestoßen wird, gibt es Zeichen, Inhalt Die Werte sind diese Zeichenfolgen.
Von einem Tag gibt es Zeichen, bevor sie auf das nächste Tag stoßen, und der Wert des Inhalts sind diese Zeichenfolgen.
Von einem Tag gibt es Zeichen, bevor sie auf das Zeilenendezeichen stoßen, und der Wert des Inhalts sind diese Zeichenfolgen. Das
-Tag kann ein Start-Tag oder ein End-Tag sein.
startDocument()-Methode
Wird aufgerufen, wenn das Dokument gestartet wird.
endDocument()-Methode
Wird aufgerufen, wenn der Parser das Ende des Dokuments erreicht. Die
startElement(name, attrs)-Methode
wird aufgerufen, wenn ein XML-Start-Tag gefunden wird. name ist der Name des Tags und attrs ist das Attributwertwörterbuch des Tags. Die
endElement(name)-Methode
wird aufgerufen, wenn ein XML-End-Tag gefunden wird.
make_parser-Methode
Die folgende Methode erstellt ein neues Parser-Objekt und gibt es zurück.
xml.sax.make_parser( [parser_list] )
Parameterbeschreibung:
parser_list – Optionale Parameter, Parserliste
Parser-Methode
Die folgende Methode erstellt einen SAX-Parser und analysiert das XML-Dokument:
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
Parameterbeschreibung:
xmlfile - XML-Dateiname
contenthandler – muss ein ContentHandler-Objekt sein
errorhandler – wenn dieser Parameter angegeben ist, muss errorhandler ein SAX-ErrorHandler-Objekt sein
parseString-Methode
parseString-Methode erstellt einen XML-Parser und analysiert die XML-Zeichenfolge: xml.sax.parseString(xmlstring, contenthandler[, errorhandler])Parameterbeschreibung: xmlstring – XML-String contenthandler – muss ein Objekt von ContentHandler sein errorhandler – If Wenn dieser Parameter angegeben ist, muss der Fehlerhandler ein SAX-ErrorHandler-Objekt sein >
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 = ""
# Element startet die Ereignisverarbeitung
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "movie":
print "* * ***Film*****"
title = attributes["title"]
print "Title:", title
# Elementende-Ereignisbehandlung
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 "Beschreibung: " , self.description
self.CurrentData = ""
#Content-Ereignisbehandlung
def Zeichen (Selbst, Inhalt):
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.starting = content
elif self.CurrentData == "stars":
self.stars = content
elif self.CurrentData = = "description":
self.description = content
if ( __name__ == "__main__"):
# 创建一个 XMLReader
parser = xml.sax.make_parser()
# namespaces deaktivieren
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# 重写 ContextHandler
Handler = MovieHandler()
parser.setContentHandler( Handler )
parser.parse("movies.xml")
以上代码执行结果如下:
*****Film*****
Titel: Enemy Behind
Typ: Krieg, Thriller
Format: DVD
Jahr : 2003
Bewertung: PG
Sterne: 10
Beschreibung: Sprechen über einen Krieg zwischen den USA und Japan
*****Film*** **
Titel: Transformers
Typ: Anime, Science-Fiction
Format: DVD
Jahr: 1989
Bewertung: R
Sterne: 8
Beschreibung: Eine wissenschaftliche Fiktion
*****Film*****
Titel: Trigun
Typ: Anime, Action
Format: DVD
Bewertung: PG
Sterne: 10
Beschreibung: Vash the Stampede!
*****Film*****
Titel: Ishtar
Typ: Komödie
Format: VHS
Bewertung: PG
Sterne: 2
Beschreibung: Sichtbare Langeweile
完整的 SAX API 文档请查阅Python SAX APIs
使用xml.dom解析xml
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口.
一个 DOM的解析器在解析一个 XML 文档时, 一次性读取整个文档, 把文档中所有元素保存在内存中的个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件.
python中用xml.dom.minidom来解析xml文件,实例如下:
#!/usr/bin/python
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")
# 打印每部电影的详细信息
für Film in Filmen:
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 = Film. getElementsByTagName('description')[0]
print "Description: %s" % description.childNodes[0].data
以上程序执行结果如下:
Stammelement : Neuzugänge
*****Film*****
Titel : Enemy Behind
Typ: Krieg, Thriller
Format: DVD
Einstufung: PG
Beschreibung: Talk über einen Krieg zwischen den USA und Japan
*****Film*****
Titel: Transformers
Typ: Anime, Science-Fiction
Format: DVD
Bewertung: R
Beschreibung: Eine wissenschaftliche Fiktion
*****Film*****
Titel: Trigun
Typ: Anime, Aktion
Format: DVD
Bewertung: PG
Beschreibung: Vash the Stampede!
*****Film*****
Titel: Ishtar
Typ: Komödie
Format: VHS
Bewertung: PG
Beschreibung: Sichtbare Langeweile