Persistencia de datos de Python: analizadores XML
XML es el acrónimo de eXtensible Markup Language. Es un lenguaje portátil, de código abierto y multiplataforma muy parecido a HTML o SGML y recomendado por el World Wide Web Consortium.
Es un formato de intercambio de datos bien conocido, utilizado por una gran cantidad de aplicaciones, como servicios web, herramientas de oficina y Service Oriented Architectures(SOA). El formato XML es legible por máquina y legible por humanos.
El paquete xml de la biblioteca estándar de Python consta de los siguientes módulos para el procesamiento XML:
No Señor. | Módulos y descripción |
---|---|
1 | xml.etree.ElementTree la API ElementTree, un procesador XML simple y ligero |
2 | xml.dom la definición de la API DOM |
3 | xml.dom.minidom una implementación DOM mínima |
4 | xml.sax Implementación de la interfaz SAX2 |
5 | xml.parsers.expat el enlace del analizador de expatriados |
Los datos del documento XML se organizan en un formato jerárquico en forma de árbol, comenzando con la raíz y los elementos. Cada elemento es un solo nodo en el árbol y tiene un atributo incluido en las etiquetas <> y </>. Se pueden asignar uno o más subelementos a cada elemento.
A continuación se muestra un ejemplo típico de un 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>
Durante el uso ElementTreemódulo, el primer paso es configurar el elemento raíz del árbol. Cada elemento tiene una etiqueta y un atributo que es un objeto dict. Para el elemento raíz, un atributo es un diccionario vacío.
import xml.etree.ElementTree as xmlobj
root=xmlobj.Element('studentList')
Ahora, podemos agregar uno o más elementos debajo del elemento raíz. Cada objeto de elemento puede tenerSubElements. Cada subelemento tiene un atributo y una propiedad 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 nuevo elemento se agrega a la raíz usando el método append ().
root.append(student)
Agregue tantos elementos como desee utilizando el método anterior. Finalmente, el objeto del elemento raíz se escribe en un archivo.
tree = xmlobj.ElementTree(root)
file = open('studentlist.xml','wb')
tree.write(file)
file.close()
Ahora, vemos cómo analizar el archivo XML. Para eso, construya el árbol del documento dando su nombre como parámetro de archivo en el constructor ElementTree.
tree = xmlobj.ElementTree(file='studentlist.xml')
El objeto de árbol tiene getroot() para obtener el elemento raíz y getchildren () devuelve una lista de elementos debajo de él.
root = tree.getroot()
children = root.getchildren()
Un objeto de diccionario correspondiente a cada subelemento se construye iterando sobre la colección de subelementos de cada nodo hijo.
for child in children:
student={}
pairs = child.getchildren()
for pair in pairs:
product[pair.tag]=pair.text
Luego, cada diccionario se agrega a una lista que devuelve la lista original de objetos de diccionario.
SAXes una interfaz estándar para el análisis de XML controlado por eventos. Analizar XML con SAX requiere ContentHandler subclasificando xml.sax.ContentHandler. Registra devoluciones de llamada para eventos de interés y luego, deja que el analizador continúe con el documento.
SAX es útil cuando sus documentos son grandes o tiene limitaciones de memoria, ya que analiza el archivo a medida que lo lee del disco, como resultado, el archivo completo nunca se almacena en la memoria.
Modelo de objetos de documento
(DOM) API es una recomendación del World Wide Web Consortium. En este caso, el archivo completo se lee en la memoria y se almacena en una forma jerárquica (basada en árboles) para representar todas las características de un documento XML.
SAX, no tan rápido como DOM, con archivos grandes. Por otro lado, DOM puede matar recursos, si se usa en muchos archivos pequeños. SAX es de solo lectura, mientras que DOM permite cambios en el archivo XML.