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.