Analyse XML Python3
Qu'est-ce que XML ?
XML fait référence à un langage de balisage extensible (eXtensible Markup Llangage), un sous-ensemble du langage de balisage universel standard. langage utilisé pour baliser les documents électroniques afin de leur donner une structure structurée. 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.
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. La méthode
endDocument()est appelée 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. La méthode suivante crée un nouvel objet analyseur et le renvoie. Description du paramètre : parser_list -
Paramètres facultatifs, liste d'analyseurs La méthode suivante crée un analyseur SAX et analyse les documents XML : 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 la méthode parseString crée un analyseur XML et analyse la chaîne XML : 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 Le résultat de l'exécution du code ci-dessus est le suivant : Pour une documentation complète de l'API SAX, veuillez vous référer aux API Python SAX 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é pour analyser les fichiers XML en python. L'exemple est le suivant : Le résultat de l'exécution du programme ci-dessus est le suivant : Méthode make_parser
xml.sax.make_parser( [parser_list] )
méthode d'analyse
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
méthode parseString
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
Instance XML d'analyse Python
#!/usr/bin/python3
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")
*****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
Utilisez xml.dom pour analyser XML
#!/usr/bin/python3
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)
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.