Python Data Persistence - XML ​​Parsers

XML é acrônimo para eXtensible Markup Language. É uma linguagem portátil, de código aberto e de plataforma cruzada muito semelhante a HTML ou SGML e recomendada pelo World Wide Web Consortium.

É um formato de intercâmbio de dados bem conhecido, usado por um grande número de aplicativos, como serviços da web, ferramentas de escritório e Service Oriented Architectures(SOA). O formato XML pode ser lido por máquina e por humanos.

O pacote xml da biblioteca Python padrão consiste nos seguintes módulos para processamento XML -

Sr. Não. Módulos e descrição
1

xml.etree.ElementTree

a API ElementTree, um processador XML simples e leve

2

xml.dom

a definição da API DOM

3

xml.dom.minidom

uma implementação DOM mínima

4

xml.sax

Implementação da interface SAX2

5

xml.parsers.expat

a ligação do analisador Expat

Os dados no documento XML são organizados em um formato hierárquico semelhante a uma árvore, começando com raiz e elementos. Cada elemento é um único nó na árvore e tem um atributo entre as tags <> e </>. Um ou mais subelementos podem ser atribuídos a cada elemento.

A seguir está um exemplo típico de um documento 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>

Enquanto estiver usando ElementTreemódulo, o primeiro passo é configurar o elemento raiz da árvore. Cada elemento possui uma tag e um atrib que é um objeto dict. Para o elemento raiz, um atrib é um dicionário vazio.

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

Agora, podemos adicionar um ou mais elementos no elemento raiz. Cada objeto de elemento pode terSubElements. Cada subelemento possui um atributo e uma propriedade de texto.

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'

Este novo elemento é anexado à raiz usando o método append ().

root.append(student)

Acrescente quantos elementos desejar usando o método acima. Finalmente, o objeto do elemento raiz é gravado em um arquivo.

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

Agora, vemos como analisar o arquivo XML. Para isso, construa a árvore de documentos dando seu nome como parâmetro de arquivo no construtor ElementTree.

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

O objeto árvore tem getroot() método para obter o elemento raiz e getchildren () retorna uma lista de elementos abaixo dele.

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

Um objeto de dicionário correspondente a cada subelemento é construído iterando sobre a coleção de subelementos de cada nó filho.

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

Cada dicionário é então anexado a uma lista que retorna a lista original de objetos de dicionário.

SAXé uma interface padrão para análise XML baseada em eventos. A análise de XML com SAX requer ContentHandler pela subclasse de xml.sax.ContentHandler. Você registra retornos de chamada para eventos de interesse e, em seguida, permite que o analisador prossiga pelo documento.

O SAX é útil quando seus documentos são grandes ou você tem limitações de memória, pois analisa o arquivo à medida que o lê do disco e, como resultado, o arquivo inteiro nunca é armazenado na memória.

Modelo de Objeto de Documento

(DOM) API é uma recomendação do World Wide Web Consortium. Nesse caso, o arquivo inteiro é lido na memória e armazenado de forma hierárquica (baseada em árvore) para representar todos os recursos de um documento XML.

SAX, não tão rápido quanto DOM, com arquivos grandes. Por outro lado, o DOM pode eliminar recursos, se usado em muitos arquivos pequenos. SAX é somente leitura, enquanto DOM permite alterações no arquivo XML.