suchen

Python-XML-Analyse

Nov 23, 2016 pm 01:58 PM

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

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
Wie erstellen Sie mehrdimensionale Arrays mit Numpy?Wie erstellen Sie mehrdimensionale Arrays mit Numpy?Apr 29, 2025 am 12:27 AM

Durch die folgenden Schritte können mehrdimensionale Arrays mit Numpy erstellt werden: 1) Verwenden Sie die Funktion numpy.array (), um ein Array wie NP.Array ([1,2,3], [4,5,6]) zu erstellen, um ein 2D-Array zu erstellen; 2) Verwenden Sie np.zeros (), np.ones (), np.random.random () und andere Funktionen, um ein Array zu erstellen, das mit spezifischen Werten gefüllt ist; 3) Verstehen Sie die Form- und Größeneigenschaften des Arrays, um sicherzustellen, dass die Länge des Unterarrays konsistent ist und Fehler vermeiden. 4) Verwenden Sie die Funktion np.reshape (), um die Form des Arrays zu ändern. 5) Achten Sie auf die Speichernutzung, um sicherzustellen, dass der Code klar und effizient ist.

Erklären Sie das Konzept des 'Rundfunks' in Numpy -Arrays.Erklären Sie das Konzept des 'Rundfunks' in Numpy -Arrays.Apr 29, 2025 am 12:23 AM

SendeminnumpyissamethodtoperformoperationsonarraysofdifferentShapesByAutomaticaligningTHem.itsimplifiesCode, Verbesserung der Verschiebbarkeit, und BoostSPerformance.her'Showitworks: 1) kleinereArraysArepaddedwithonestOMatchDimens.2) compatibledimens

Erklären Sie, wie Sie zwischen Listen, Array.Array und Numpy -Arrays für die Datenspeicherung auswählen.Erklären Sie, wie Sie zwischen Listen, Array.Array und Numpy -Arrays für die Datenspeicherung auswählen.Apr 29, 2025 am 12:20 AM

Forpythondatastorage, ChooselistsforflexibilitätswithmixedDatatypes, Array.Arrayformemory-effizientesHomogenoususnumericalData und NumpyArraysForAdvancedNumericalComputing.ListsareversAntileffictionForLarGenicalDataSetsetaSets;

Geben Sie ein Beispiel für ein Szenario an, in dem die Verwendung einer Python -Liste angemessener wäre als die Verwendung eines Arrays.Geben Sie ein Beispiel für ein Szenario an, in dem die Verwendung einer Python -Liste angemessener wäre als die Verwendung eines Arrays.Apr 29, 2025 am 12:17 AM

PythonlistsarebetterTterThanarraysFormAnagingDiversedatatypes.1) ListScanholdElements ofdifferenttypes, 2) siearedynamic, erlauben EasyDitionSsandremovals, 3) sie antelluitive Operationenslikesklikationen, Buth), sie ohne Ereignis-effosidentandslowentlaunenfeuer.

Wie können Sie in einem Python -Array auf Elemente zugreifen?Wie können Sie in einem Python -Array auf Elemente zugreifen?Apr 29, 2025 am 12:11 AM

ToaccesselementSinapythonarray, useIndexing: my_array [2] AccessaThThirtelement, returning3.pythonuseszero-basiertindexing.1) usepositiveAndnegativeIndexing: my_list [0] fORGHEFIRSTELEMENT, MY_LIST [-1] Forthelast.2) VerwendungsforArange: my_list [1: 5] extractsselemen

Ist das Tupelverständnis in Python möglich? Wenn ja, wie und wenn nicht warum?Ist das Tupelverständnis in Python möglich? Wenn ja, wie und wenn nicht warum?Apr 28, 2025 pm 04:34 PM

In Artikel wird die Unmöglichkeit des Tupelverständnisses in Python aufgrund von Syntax -Mehrdeutigkeiten erörtert. Alternativen wie die Verwendung von Tuple () mit Generatorausdrücken werden vorgeschlagen, um Tupel effizient zu erstellen (159 Zeichen)

Was sind Module und Pakete in Python?Was sind Module und Pakete in Python?Apr 28, 2025 pm 04:33 PM

Der Artikel erläutert Module und Pakete in Python, deren Unterschiede und Verwendung. Module sind einzelne Dateien, während Pakete Verzeichnisse mit einer __init__.py -Datei sind, die verwandte Module hierarchisch organisieren.

Was ist Docstring in Python?Was ist Docstring in Python?Apr 28, 2025 pm 04:30 PM

In Artikel werden Docstrings in Python, deren Nutzung und Vorteile erörtert. Hauptproblem: Bedeutung von DocStrings für die Code -Dokumentation und -zugriffsfunktion.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor