Latest web development tutorials

Python XML parsing

Qu'est-ce que XML?

signifie XML(ExtensibleMarkup Languagee X tensible M arkup L anguage). Vous pouvez apprendre à travers ce site Tutorial XML

XML est conçu pour transmettre et stocker des données.

XML est un ensemble de règles pour définir la sémantique des balises, ces balises documentera divisés en plusieurs parties et ces parties à identifier.

Il est aussi un langage méta-balisage qui définit la syntaxe de la langue utilisée pour définir l'autre, sémantique, langage de balisage structuré spécifique au domaine.


python pour l'analyse XML

DOM commune et XML programmation interfaces SAX, deux interfaces différentes avec fichiers XML comme, bien sûr, l'utilisation de différentes occasions.

Il y a trois façons python parsing XML, SAX, DOM et ElementTree:

1.SAX (API simple pour XML)

python bibliothèque standard contient SAX, SAX avec le modèle événementiel, déclenché par un événement dans le processus d'analyse XML et appeler des fonctions de rappel définies par l'utilisateur pour gérer les fichiers XML.

2.DOM (modèle objet de document)

Les données XML est analysé dans un arbre en mémoire, opérant à travers l'arbre de manipuler XML.

3.ElementTree (élément arbre)

ElementTree comme DOM léger, avec une API pratique et conviviale. la disponibilité du code, rapide et consomme moins de mémoire.

Remarque: En raison de DOM besoin de cartographier les données XML dans l' arbre de la mémoire, une lente, la seconde est une plus grande consommation de mémoire, SAX en streaming lit le fichier XML plus rapide, prennent moins de mémoire, mais oblige l'utilisateur à mettre en œuvre le rappel (gestionnaire ).

Utilisez cette section pour un XML document d'instance movies.xml se lit comme suit:

<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 parsing XML en utilisant SAX

SAX est une API événementielle.

Utilisez SAX analyse d'un document XML comporte deux parties: le gestionnaire d'analyseur et l'événement.

L'analyseur est responsable de la lecture des documents XML, et envoie des gestionnaires d'événements d'événements, tels que les éléments commencent à l'événement élément d'extrémité;

Le gestionnaire d'événements est responsable de l'événement en conséquence, le transfert de données XML pour le traitement.

  • 1, le traitement des fichiers volumineux;
  • 2, seule une partie du contenu du fichier, ou tout simplement pour obtenir des informations spécifiques à partir du fichier.
  • 3, veulent construire leur propre modèle d'objet du temps.

Utilisez sax xml.sax manière xml d'abord introduit dans la fonction d'analyse, ainsi que la xml.sax.handler ContentHandler en python.

méthode de classe ContentHandler introduit

caractères (contenu) Méthode

Le moment de l'appel:

Dès le début de la ligne, avant de connaître l'étiquette, il y a une valeur de caractère, le contenu de ces chaînes.

À partir d'une étiquette, une étiquette avant la rencontre suivante, la présence du caractère, la valeur du contenu de ces chaînes.

A partir d'une étiquette, avant de rencontrer une terminaison de ligne, la présence de caractères, la valeur du contenu de ces chaînes.

Le repère peut être le début de la balise, elle peut être la fin de l'étiquette.

méthode startDocument ()

Documentation démarrage appelé.

Méthode de endDocument ()

Lorsque l'appel arrive à la fin du document parser.

(, Nom attrs) Méthode startElement

Appel rencontré balise de début de XML, le nom est le nom de la balise, attrs est une valeur de propriété tag dictionnaire.

méthode endElement (nom)

Appel rencontré balise de fin de XML.


méthode make_parser

La méthode suivante crée un nouvel objet de l'analyseur et retourne.

xml.sax.make_parser( [parser_list] )

Description Paramètre:

  • parser_list - paramètre facultatif, la liste de l' analyseur

Méthode d'analyse syntaxique

La méthode suivante crée un analyseur SAX et analyser le document xml:

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

Description Paramètre:

  • xmlfile - nom de fichier xml
  • ContentHandler - doit faire l'objet d'un ContentHandler
  • ErrorHandler - Si ce paramètre est spécifié, ErrorHandler doit être un objet SAX ErrorHandler

méthode parseString

méthode parseString crée un analyseur XML et analyser la chaîne de xml:

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

Description Paramètre:

  • xmlString - chaîne XML
  • ContentHandler - doit faire l'objet d'un ContentHandler
  • ErrorHandler - Si ce paramètre est spécifié, ErrorHandler doit être un objet SAX ErrorHandler

instance XML parsing 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 code ci-dessus est exécuté comme suit:

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

La documentation complète de l' API SAX s'il vous plaît se référer aux Python SAX API


Utilisez xml.dom parse xml

Modèle Document Object (Document Object Model, dénommé DOM), il est un traitement recommandé par le W3C interface de programmation standard Extensible Markup Language.

Dans un analyseur DOM pour analyser un document XML, lire l'intégralité du document à la fois, tous les éléments du document enregistré dans une structure arborescente en mémoire, vous pouvez utiliser le DOM pour fournir des fonctions différentes pour lire ou modifier le document le contenu et la structure à modifier pour écrire le contenu du fichier xml.

python xml.dom.minidom pour analyser un document XML, les exemples sont les suivantes:

#!/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

Les résultats des procédures ci-dessus sont les suivantes:

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

La documentation complète de l' API DOM s'il vous plaît se référer à la Python l'API DOM .