Saltar al contenido

Tutorial de Python XML Parser: Leer ejemplo de archivo xml (Minidom, ElementTree)

diciembre 8, 2019

¿Qué es XML?

XML significa eXtensible Markup Language. Fue diseñado para almacenar y transportar pequeñas y medianas cantidades de datos y es ampliamente utilizado para compartir información estructurada.

Python le permite analizar y modificar documentos XML. Para poder analizar un documento XML es necesario tener todo el documento XML en la memoria. En este tutorial, veremos cómo podemos usar la clase XML minidom en Python para cargar y analizar archivos XML.

En este tutorial, aprenderemos-

  • Cómo analizar XML usando minidom
  • Cómo crear un nodo XML
  • Cómo analizar XML usando ElementTree

Cómo analizar XML usando minidom

Hemos creado un archivo XML de ejemplo que vamos a analizar.

Paso 1) Dentro del archivo, podemos ver el nombre, el apellido, la casa y el área de especialización (SQL, Python, Testing and Business)

Paso 2) Una vez que hayamos analizado el documento, imprimiremos el “nombre de nodo” de la raíz del documento y el ” nombre de etiqueta firstchild” . Tagname y nodename son las propiedades estándar del archivo XML.

    • Importe el módulo xml.dom.minidom y declare el archivo que tiene que ser analizado (myxml.xml)
    • Este archivo contiene información básica sobre el empleado como su nombre, apellido, hogar, experiencia, etc.
    • Usamos la función de análisis en el minidomo XML para cargar y analizar el archivo XML
    • Tenemos doc variable y doc obtiene el resultado de la función de análisis
    • Queremos imprimir el nombre de nodo y el nombre de etiqueta hijo desde el archivo, así que lo declaramos en la función de impresión
    • Ejecutar el código – Imprime el nombre de nodo (#documento) del archivo XML y el primer nombre de etiqueta hijo (empleado) del archivo XML

.

Nota :

El nombre de nodo y el nombre de etiqueta hijo son los nombres o propiedades estándar de un dominio XML. En caso de que no esté familiarizado con este tipo de convenciones para fijar nombres.

Paso 3) También podemos llamar a la lista de etiquetas XML del documento XML e imprimirla. Aquí imprimimos el conjunto de habilidades como SQL, Python, Testing y Business.

  • Declarar la pericia variable, de la que vamos a extraer toda la pericia que tiene el empleado
  • Utilice la función dom estándar llamada “getElementsByTagName”
  • Esto obtendrá todos los elementos denominados skill
  • Declarar bucle sobre cada una de las etiquetas de habilidad
  • Ejecutar el código – Le dará una lista de cuatro habilidades

Cómo crear un nodo XML

Podemos crear un nuevo atributo usando la función “createElement” y luego añadir este nuevo atributo o etiqueta a las etiquetas XML existentes. Hemos añadido una nueva etiqueta “BigData” en nuestro archivo XML.

  1. Tiene que codificar para añadir el nuevo atributo (BigData) a la etiqueta XML existente
  2. Luego tiene que imprimir la etiqueta XML con nuevos atributos añadidos con la etiqueta XML existente
  • Para añadir un nuevo XML y añadirlo al documento, utilizamos el código “doc.create elements”
  • Este código creará una nueva etiqueta de habilidad para nuestro nuevo atributo “Big-data”
  • Agregar esta etiqueta de habilidad al documento first child (empleado)
  • Ejecute el código – la nueva etiqueta “big data” aparecerá con la otra lista de expertos

Ejemplo de analizador de XML

Python 2 Ejemplo

import xml.dom.minidom

def main():
# use the parse() function to load and parse an XML file
   doc = xml.dom.minidom.parse("Myxml.xml");
  
# print out the document node and the name of the first child tag
   print doc.nodeName
   print doc.firstChild.tagName
  
# get a list of XML tags from the document and print each one
   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
# create a new XML tag and add it into the document
   newexpertise = doc.createElement("expertise")
   newexpertise.setAttribute("name", "BigData")
   doc.firstChild.appendChild(newexpertise)
   print " "

   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
if name == "__main__":
  main();

Python 3 Example

import xml.dom.minidom

def main():
    # use the parse() function to load and parse an XML file
    doc = xml.dom.minidom.parse("Myxml.xml");

    # print out the document node and the name of the first child tag
    print (doc.nodeName)
    print (doc.firstChild.tagName)
    # get a list of XML tags from the document and print each one
    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

    # create a new XML tag and add it into the document
    newexpertise = doc.createElement("expertise")
    newexpertise.setAttribute("name", "BigData")
    doc.firstChild.appendChild(newexpertise)
    print (" ")

    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

if __name__ == "__main__":
    main();

Cómo analizar XML usando ElementTree

ElementTree es una API para manipular XML. ElementTree es la forma más sencilla de procesar archivos XML.

Estamos utilizando el siguiente documento XML como ejemplo de datos:

<data>
   <items>
      <item name="expertise1">SQL</item>
      <item name="expertise2">Python</item>
   </items>
</data>

Lectura de XML usando ElementTree:

primero debemos importar el módulo xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Ahora vamos a buscar el elemento raíz:

root = tree.getroot()

A continuación se muestra el código completo para la lectura de datos por encima de xml

import xml.etree.ElementTree as ET
tree = ET.parse('items.xml')
root = tree.getroot()

# all items data
print('Expertise Data:')

for elem in root:
   for subelem in elem:
      print(subelem.text)

Salida :

Expertise Data:
SQL
Python
Resumen:

Python le permite analizar todo el documento XML de una sola vez y no sólo una línea a la vez. Para poder analizar un documento XML es necesario tener todo el documento en la memoria.

  • Para analizar un documento XML
    • Importar xml.dom.minidom
    • Utilice la función “parse” para parsear el documento ( doc=xml.dom.minidom.parse (nombre de archivo);
    • Llamar a la lista de etiquetas XML desde el documento XML usando código (=doc.getElementsByTagName( “name of xml tags”)
  • Para crear y añadir un nuevo atributo en un documento XML
    • Utilice la función “createElement”

https://openanalytics.es/lectura-y-escritura-de-archivos-csv-en-python-usando-csv-module-pandas/

(abre en una nueva pestaña)