Analyse XML Python
Qu'est-ce que XML ?
XML fait référence à Extensible Markup Language (eXtensible Markup Llangage). Vous pouvez apprendre des tutoriels XML via ce site
XML est conçu pour transmettre et stocker des données.
XML est un ensemble de règles qui définissent un balisage sémantique qui divise un document en composants et identifie ces composants.
C'est également un langage de méta-balisage, c'est-à-dire qu'il définit un langage syntaxique pour définir d'autres langages de balisage sémantiques et structurés liés à des champs spécifiques.
L'analyse XML par Python
Les interfaces de programmation XML courantes incluent DOM et SAX. Ces deux interfaces traitent les fichiers XML de différentes manières, et bien sûr, les scénarios d'utilisation sont également différents.
Python dispose de trois méthodes pour analyser XML, SAX, DOM et ElementTree :
1.SAX (API simple pour XML)
La bibliothèque standard Python contient l'analyseur SAX, SAX À l'aide du modèle basé sur les événements, les fichiers XML sont traités en déclenchant des événements un par un et en appelant des fonctions de rappel définies par l'utilisateur pendant le processus d'analyse XML.
2.DOM (Document Object Model)
Analyse les données XML dans une arborescence en mémoire et exploite XML en opérant sur l'arborescence.
3.ElementTree (Element Tree)
ElementTree est comme un DOM léger avec une API pratique et conviviale. Le code est facile à utiliser, rapide et consomme moins de mémoire.
Remarque : Étant donné que DOM doit mapper les données XML à une arborescence en mémoire, d'une part, il est relativement lent, et d'autre part, il consomme plus de mémoire, tandis que le streaming SAX lit les fichiers XML, ce qui est plus rapide. Il consomme moins de mémoire, mais nécessite que l'utilisateur implémente une fonction de rappel (gestionnaire).
Le contenu du fichier d'exemple XML movie.xml utilisé dans ce chapitre est le suivant :
<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 utilise SAX pour analyser XML
SAX est un événement API pilotée par .
L'utilisation de SAX pour analyser des documents XML implique deux parties : l'analyseur et le gestionnaire d'événements.
L'analyseur est responsable de la lecture du document XML et de l'envoi des événements au processeur d'événements, tels que les événements de début et de fin d'élément
Le processeur d'événements est responsable de répondre à l'événement et de le transmettre ; les données XML sont traitées.
<psax convient pour gérer les problèmes suivants : < p="">1. Traitement des fichiers volumineux ; 2. Seule une partie du contenu du fichier est requise, ou seules des informations spécifiques sont requises du fichier.
3. Lorsque vous souhaitez créer votre propre modèle objet.
Pour utiliser sax pour traiter du XML en python, vous devez d'abord introduire la fonction d'analyse dans xml.sax et le ContentHandler dans xml.sax.handler.
Introduction à la méthode de classe ContentHandler
Minutage de l'appel : Commencer à partir de la ligne, avant de rencontrer le label , il y a des caractères et la valeur du contenu est constituée de ces chaînes.
D'une balise, il y a des caractères avant de rencontrer la balise suivante, et la valeur du contenu est constituée de ces chaînes.
À partir d'une balise, il y a des caractères avant de rencontrer le terminateur de ligne, et la valeur du contenu est ces chaînes. La balise
peut être une balise de début ou une balise de fin. La méthode
startDocument()est appelée au démarrage du document.
Méthode endDocument()Appelé lorsque l'analyseur atteint la fin du document. La méthode
startElement(name, attrs)
est appelée lorsqu'une balise de début XML est rencontrée. name est le nom de la balise et attrs est le dictionnaire de valeurs d'attribut. de l'étiquette. La méthode
endElement(name)
est appelée lorsqu'une balise de fin XML est rencontrée.
Méthode make_parser
La méthode suivante crée un nouvel objet analyseur et le renvoie.
xml.sax.make_parser( [parser_list] )
Description du paramètre :
parser_list - Paramètres facultatifs, liste d'analyseurs
méthode d'analyse
La méthode suivante crée un analyseur SAX et analyse les documents XML :
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
paramètres Description :
fichier xml - nom du fichier XML
contenthandler - Doit être un objet ContentHandler
errorhandler - Si ce paramètre est spécifié, errorhandler doit être un objet SAX ErrorHandler
méthode parseString
la méthode parseString crée un analyseur XML et analyse la chaîne XML :
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
Description du paramètre :
xmlstring - chaîne XML
contenthandler - Doit être un objet ContentHandler
errorhandler - Si ce paramètre est spécifié, errorhandler doit être un objet SAX ErrorHandler
Instance XML d'analyse Python
#!/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")
Le résultat de l'exécution du code ci-dessus est le suivant :
*****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
Pour une documentation complète de l'API SAX, veuillez vous référer aux API Python SAX
Utilisez xml.dom pour analyser XML
Document Object Model (DOM), qui est le traitement recommandé par l'organisation W3C. Une interface de programmation standard pour les langages de balisage extensibles.
Lorsqu'un analyseur DOM analyse un document XML, il lit l'intégralité du document en une seule fois et enregistre tous les éléments du document dans une arborescence en mémoire. Après cela, vous pouvez utiliser les différentes fonctions fournies par le DOM. . Pour lire ou modifier le contenu et la structure du document, vous pouvez également écrire le contenu modifié dans un fichier XML.
xml.dom.minidom est utilisé en python pour analyser les fichiers XML. L'exemple est le suivant :
#!/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
Le résultat de l'exécution du programme ci-dessus est le suivant :
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<🎜. >Pour une documentation complète sur l'API DOM, veuillez vous référer aux API Python DOM.