Heim > Artikel > WeChat-Applet > Detaillierte Erläuterung des XML-Parsings in Python
XML bezieht sich auf Extensible Markup Language (eXtensible Markup Language).
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.
Common XMLProgrammierungSchnittstelleEs gibt DOM und SAX, diese beiden Zwei 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:
Python-Standardbibliothek enthält einen SAX-Parser. SAX verwendet Ereignisse, um das Modell zu steuern, indem es Ereignisse nacheinander auslöst und den Benutzer währenddessen aufruft Prozess der XML-Analyse. Definieren Sie die Rückruffunktion , um die XML-Datei zu verarbeiten.
Parsen Sie die XML-Daten durch Manipulieren in einen Baum im Speicher XML mit Baumoperationen.
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 erstens relativ langsam und zweitens verbraucht es mehr Speicher, während SAX-Streaming XML-Dateien liest ist schneller. Es benötigt weniger Speicher, erfordert jedoch die Implementierung einer Rückruffunktion (handler).
Der Inhalt der in diesem Kapitel verwendeten XML-Beispieldatei 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>
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 Objekt 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.
Zeichen(inhalt)-Methode
Aufrufzeitpunkt:
Beginnen Sie in der Zeile, bevor Sie auf die stoßen label , es gibt Zeichen und der Wert des Inhalts 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.
In 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. Die
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 der Attribut Wörterbuch der Werte. Die
endElement(name)-Methode
wird aufgerufen, wenn ein XML-End-Tag gefunden wird.xml.sax.make_parser( [parser_list] )Parameterbeschreibung:
parser_list - Optionaler Parameter, Parserliste
xml.sax.parse( xmlfile, contenthandler[, errorhandler])Parameterbeschreibung:
xmlfile – XML-Dateiname
contenthandler – muss ein ContentHandler-Objekt sein
errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象
parseString方法创建一个XML解析器并解析xml字符串:
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
参数说明:
xmlstring - xml字符串
contenthandler - 必须是一个ContentHandler的对象
errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象
#!/usr/bin/python# -*- coding: UTF-8 -*-import xml.saxclass 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")
以上代码执行结果如下:
*****Movie*****Title: Enemy BehindType: War, ThrillerFormat: DVDYear: 2003Rating: PGStars: 10Description: Talk about a US-Japan war*****Movie*****Title: TransformersType: Anime, Science FictionFormat: DVDYear: 1989Rating: RStars: 8Description: A schientific fiction*****Movie*****Title: TrigunType: Anime, ActionFormat: DVDRating: PGStars: 10Description: Vash the Stampede!*****Movie*****Title: IshtarType: ComedyFormat: VHSRating: PGStars: 2Description: Viewable boredom
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
python中用xml.dom.minidom来解析xml文件,实例如下:
#!/usr/bin/python# -*- coding: UTF-8 -*-from xml.dom.minidom import parseimport xml.dom.minidom# 使用minidom解析器打开 XML 文档DOMTree = xml.dom.minidom.parse("movies.xml")collection = DOMTree.documentElementif 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
以上程序执行结果如下:
Root element : New Arrivals*****Movie*****Title: Enemy BehindType: War, ThrillerFormat: DVDRating: PGDescription: Talk about a US-Japan war*****Movie*****Title: TransformersType: Anime, Science FictionFormat: DVDRating: RDescription: A schientific fiction*****Movie*****Title: TrigunType: Anime, ActionFormat: DVDRating: PGDescription: Vash the Stampede!*****Movie*****Title: IshtarType: ComedyFormat: VHSRating: PGDescription: Viewable boredom
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des XML-Parsings in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!