Maison > Article > Applet WeChat > Explication détaillée de l'analyse XML en Python
XML fait référence au langage de balisage extensible (eXtensible Markup Llangage).
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.
XML communProgrammationInterfaceIl y a DOM et SAX, ces deux-là deux interfaces traitent les fichiers XML de différentes manières et, bien entendu, les scénarios d'utilisation sont également différents.
Python dispose de trois méthodes pour analyser XML, SAX, DOM et ElementTree :
bibliothèque standard python comprend un analyseur SAX qui utilise des événements pour piloter le modèle en déclenchant les événements un par un et en appelant l'utilisateur pendant le processus. processus d'analyse XML. Définissez la fonction de rappel pour traiter le fichier XML.
Analyser les données XML dans une arborescence en mémoire, via Manipuler XML utilisant des opérations d'arborescence.
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 prend moins de mémoire, mais nécessite que l'utilisateur implémente une fonction de rappel (handler).
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>
SAX est une API basée sur les événements.
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.
1. Traitez les fichiers volumineux
2.
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.
Méthode des caractères (content)
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 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.
Dans 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 attribut Dictionnaire des valeurs. La méthode
endElement(name)
est appelée lorsqu'une balise de fin XML est rencontrée.xml.sax.make_parser( [parser_list] )Description du paramètre :
parser_list - Paramètre facultatif, liste d'analyseurs
xml.sax.parse( xmlfile, contenthandler[, errorhandler])Description du paramètre :
fichier xml - nom du fichier XML
contenthandler - doit être un objet ContentHandler
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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!