Qu'est-ce que le XML??
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.
PythonAnalyse de XML
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?:
1.SAX (simple API pour XML )
Labibliothè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.
2.DOM(Document Objet Modèle)
Analyser les données XML dans une arborescence en mémoire, via Manipuler XML utilisant des opérations d'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 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>
python utilise SAX pour analyser XML
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.
Introduction à la méthode de classe ContentHandler
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 ? de la balise. >attribut Dictionnaire des valeurs. 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ètre facultatif, liste d'analyseurs
Méthode d'analyseLa méthode suivante crée un analyseur SAX et analyse les documents XML?:
xml.sax.parse( xmlfile, contenthandler[, errorhandler])Description du paramètre?:
fichier xml - nom du fichier XML
contenthandler - doit être un objet ContentHandler
errorhandler - 如果指定該參數(shù),errorhandler必須是一個(gè)SAX ErrorHandler對象
parseString方法
parseString方法創(chuàng)建一個(gè)XML解析器并解析xml字符串:
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
參數(shù)說明:
xmlstring - xml字符串
contenthandler - 必須是一個(gè)ContentHandler的對象
errorhandler - 如果指定該參數(shù),errorhandler必須是一個(gè)SAX ErrorHandler對象
Python 解析XML實(shí)例
#!/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 # 元素結(jié)束事件處理 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 = "" # 內(nèi)容事件處理 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"): # 創(chuàng)建一個(gè) 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")
以上代碼執(zhí)行結(jié)果如下:
*****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
使用xml.dom解析xml
文件對象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴(kuò)展置標(biāo)語言的標(biāo)準(zhǔn)編程接口。
一個(gè) DOM 的解析器在解析一個(gè) XML 文檔時(shí),一次性讀取整個(gè)文檔,把文檔中所有元素保存在內(nèi)存中的一個(gè)樹結(jié)構(gòu)里,之后你可以利用DOM 提供的不同的函數(shù)來讀取或修改文檔的內(nèi)容和結(jié)構(gòu),也可以把修改過的內(nèi)容寫入xml文件。
python中用xml.dom.minidom來解析xml文件,實(shí)例如下:
#!/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")# 打印每部電影的詳細(xì)信息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
以上程序執(zhí)行結(jié)果如下:
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)