Persistance des données Python - Analyseurs XML

XML est l'acronyme de eXtensible Markup Language. C'est un langage portable, open source et multiplateforme très semblable au HTML ou au SGML et recommandé par le World Wide Web Consortium.

Il s'agit d'un format d'échange de données bien connu, utilisé par un grand nombre d'applications telles que les services Web, les outils bureautiques et Service Oriented Architectures(SOA). Le format XML est à la fois lisible par machine et lisible par l'homme.

Le package xml de la bibliothèque Python standard se compose des modules suivants pour le traitement XML -

N ° Sr. Modules et description
1

xml.etree.ElementTree

l'API ElementTree, un processeur XML simple et léger

2

xml.dom

la définition de l'API DOM

3

xml.dom.minidom

une implémentation DOM minimale

4

xml.sax

Implémentation de l'interface SAX2

5

xml.parsers.expat

la liaison de l'analyseur Expat

Les données du document XML sont organisées dans un format hiérarchique arborescent, en commençant par la racine et les éléments. Chaque élément est un nœud unique dans l'arborescence et possède un attribut entre les balises <> et </>. Un ou plusieurs sous-éléments peuvent être affectés à chaque élément.

Voici un exemple typique de document XML -

<?xml version = "1.0" encoding = "iso-8859-1"?>
<studentlist>
   <student>
      <name>Ratna</name>
      <subject>Physics</subject>
      <marks>85</marks>
   </student>
   <student>
      <name>Kiran</name>
      <subject>Maths</subject>
      <marks>100</marks>
   </student>
   <student>
      <name>Mohit</name>
      <subject>Biology</subject>
      <marks>92</marks>
   </student>
</studentlist>

Tout en utilisant ElementTreemodule, la première étape consiste à configurer l'élément racine de l'arbre. Chaque élément a une balise et un attrib qui est un objet dict. Pour l'élément racine, un attrib est un dictionnaire vide.

import xml.etree.ElementTree as xmlobj
root=xmlobj.Element('studentList')

Maintenant, nous pouvons ajouter un ou plusieurs éléments sous l'élément racine. Chaque objet élément peut avoirSubElements. Chaque sous-élément a un attribut et une propriété de texte.

student=xmlobj.Element('student')
   nm=xmlobj.SubElement(student, 'name')
   nm.text='name'
   subject=xmlobj.SubElement(student, 'subject')
   nm.text='Ratna'
   subject.text='Physics'
   marks=xmlobj.SubElement(student, 'marks')
   marks.text='85'

Ce nouvel élément est ajouté à la racine en utilisant la méthode append ().

root.append(student)

Ajoutez autant d'éléments que vous le souhaitez en utilisant la méthode ci-dessus. Enfin, l'objet élément racine est écrit dans un fichier.

tree = xmlobj.ElementTree(root)
   file = open('studentlist.xml','wb')
   tree.write(file)
   file.close()

Maintenant, nous voyons comment analyser le fichier XML. Pour cela, construisez une arborescence de documents en donnant son nom comme paramètre de fichier dans le constructeur ElementTree.

tree = xmlobj.ElementTree(file='studentlist.xml')

L'objet arbre a getroot() méthode pour obtenir l'élément racine et getchildren () retourne une liste d'éléments en dessous.

root = tree.getroot()
children = root.getchildren()

Un objet dictionnaire correspondant à chaque sous-élément est construit en itérant sur la collection de sous-éléments de chaque nœud enfant.

for child in children:
   student={}
   pairs = child.getchildren()
   for pair in pairs:
      product[pair.tag]=pair.text

Chaque dictionnaire est ensuite ajouté à une liste renvoyant la liste d'origine des objets du dictionnaire.

SAXest une interface standard pour l'analyse XML basée sur les événements. L'analyse XML avec SAX nécessite ContentHandler en sous-classant xml.sax.ContentHandler. Vous enregistrez des rappels pour les événements intéressants, puis laissez l'analyseur parcourir le document.

SAX est utile lorsque vos documents sont volumineux ou que vous avez des limitations de mémoire car il analyse le fichier pendant qu'il le lit à partir du disque. Par conséquent, le fichier entier n'est jamais stocké dans la mémoire.

Modèle d'objet de document

(DOM) API est une recommandation du World Wide Web Consortium. Dans ce cas, le fichier entier est lu dans la mémoire et stocké sous une forme hiérarchique (arborescente) pour représenter toutes les fonctionnalités d'un document XML.

SAX, pas aussi rapide que DOM, avec des fichiers volumineux. D'un autre côté, DOM peut tuer des ressources s'il est utilisé sur de nombreux petits fichiers. SAX est en lecture seule, tandis que DOM autorise les modifications du fichier XML.