Heim  >  Artikel  >  Backend-Entwicklung  >  Python-XML-Analyse

Python-XML-Analyse

高洛峰
高洛峰Original
2016-11-23 13:58:061133Durchsuche

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:

Krieg, Thriller

DVD

2003

PG

10

< ;description>Sprechen Sie über einen Krieg zwischen den USA und Japan

DVD

1989

< ;rating>R< ;/rating>

8

Eine wissenschaftliche Fiktion

Anime, Action

DVD

4

PG

10

Vash the Stampede!

Komödie

VHS

PG

2

Sichtbare Langeweile

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


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Python-JSONNächster Artikel:Python-JSON