Modificar archivos XML con Python

Python|Modificación/análisis de XML 
El lenguaje de marcado extensible (XML) es un lenguaje de marcado que define un conjunto de reglas para codificar documentos en un formato que es tanto legible por humanos como por máquinas. Los objetivos de diseño de XML se centran en la simplicidad, la generalidad, la y usabilidad a través de Internet. Es un formato de datos textuales con fuerte soporte a través de Unicode para diferentes idiomas humanos. Aunque el diseño de XML se centra en los documentos, el lenguaje se utiliza ampliamente para la representación de estructuras de datos arbitrarias, como las que se utilizan en los servicios web.
XML es un formato de datos inherentemente jerárquico, y la forma más natural de representarlo es con un árbol. Para realizar operaciones como analizar, buscar, modificar un archivo XML, usamos un módulo xml.etree.ElementTree.Tiene dos clases. ElementTree representa todo el documento XML como un árbol que ayuda al realizar las operaciones. El elemento representa un solo Node en este árbol. La lectura y la escritura de todo el documento se realizan en el nivel de ElementTree . Las interacciones con un único elemento XML y sus subelementos se realizan en el nivel de elemento .
 

Propiedades del elemento: 

Propiedades Descripción
Etiqueta String que identifica qué tipo de datos representa el elemento.
Se puede acceder usando elementname.tag .
Número de atributos Almacenado como un diccionario de Python.
Se puede acceder mediante elementname.attrib .
string de texto String de información sobre el elemento.
string infantil Información de string de elementos secundarios opcionales.
Elementos secundarios Número de elementos secundarios a una raíz particular.

ANÁLISIS:
Podemos analizar datos XML de una string o un documento XML . Considerando xml.etree.ElementTree como ET.
1. ET.parse(‘Filename’).getroot() -ET.parse(‘fname’)-crea un árbol y luego extraemos la raíz mediante .getroot().
2. ET.fromstring(stringname) -Para crear una raíz a partir de una string de datos XML.
Ejemplo 1:  
documento XML:
 

XML

<?xml version="1.0"?>
<!--COUNTRIES is the root element-->
<COUNTRIES>
    <country name="INDIA">
        <neighbor name="Dubai" direction="W"/>
    </country>
    <country name="Singapore">
        <neighbor name="Malaysia" direction="N"/>
    </country>
</COUNTRIES>

Código Python: 
 

Python3

# importing the module.
import xml.etree.ElementTree as ET
XMLexample_stored_in_a_string ='''<?xml version ="1.0"?>
<COUNTRIES>
    <country name ="INDIA">
        <neighbor name ="Dubai" direction ="W"/>
    </country>
    <country name ="Singapore">
        <neighbor name ="Malaysia" direction ="N"/>
    </country>
</COUNTRIES>
'''
# parsing directly.
tree = ET.parse('xmldocument.xml')
root = tree.getroot()
# parsing using the string.
stringroot = ET.fromstring(XMLexample_stored_in_a_string)
# printing the root.
print(root)
print(stringroot)

Producción:

salidaejemplo1

Métodos de elementos:
1) Element.iter(‘tag’) -Itera sobre todos los elementos secundarios (elementos del subárbol) 
2) Element.findall(‘tag’) -Encuentra solo elementos con una etiqueta que son elementos secundarios directos del actual elemento. 
3) Element.find(‘tag’) – Encuentra el primer Niño con la etiqueta particular. 
4) Element.get(‘tag’) -Accede a los atributos de los elementos. 
5) Element.text – Da el texto del elemento. 
6) Element.attrib : devuelve todos los atributos presentes. 
7) Element.tag : devuelve el nombre del elemento.
Ejemplo 2: 
 

Python3

import xml.etree.ElementTree as ET
XMLexample_stored_in_a_string ='''<?xml version ="1.0"?>
<States>
    <state name ="TELANGANA">
        <rank>1</rank>
        <neighbor name ="ANDHRA" language ="Telugu"/>
        <neighbor name ="KARNATAKA" language ="Kannada"/>
    </state>
    <state name ="GUJARAT">
        <rank>2</rank>
        <neighbor name ="RAJASTHAN" direction ="N"/>
        <neighbor name ="MADHYA PRADESH" direction ="E"/>
    </state>
    <state name ="KERALA">
        <rank>3</rank>
        <neighbor name ="TAMILNADU" direction ="S" language ="Tamil"/>
    </state>
</States>
'''
# parsing from the string.
root = ET.fromstring(XMLexample_stored_in_a_string)
# printing attributes of the root tags 'neighbor'.
for neighbor in root.iter('neighbor'):
    print(neighbor.attrib)
# finding the state tag and their child attributes.
for state in root.findall('state'):
    rank = state.find('rank').text
    name = state.get('name')
    print(name, rank)

Producción:

Salida de métodos de elementos.

MODIFICACIÓN: 
La modificación del documento XML también se puede realizar a través de los métodos Element. 
Métodos: 
1) Element.set(‘attrname’, ‘value’) – Modificación de los atributos de los elementos. 
2) Element.SubElement(parent, new_childtag) : crea una nueva etiqueta secundaria debajo de la principal. 
3) Element.write(‘filename.xml’) -crea el árbol de xml en otro archivo. 
4) Element.pop() -elimina un atributo en particular. 
5) Element.remove() -para eliminar una etiqueta completa.
Ejemplo 3:  
Documento XML: 
 

xml

<?xml version="1.0"?>
<breakfast_menu>
    <food>
        <name itemid="11">Belgian Waffles</name>
        <price>5.95</price>
        <description>Two of our famous Belgian Waffles
with plenty of real maple syrup</description>
        <calories>650</calories>
    </food>
    <food>
        <name itemid="21">Strawberry Belgian Waffles</name>
        <price>7.95</price>
        <description>Light Belgian waffles covered
with strawberries and whipped cream</description>
        <calories>900</calories>
    </food>
    <food>
        <name itemid="31">Berry-Berry Belgian Waffles</name>
        <price>8.95</price>
        <description>Light Belgian waffles covered with
an assortment of fresh berries and whipped cream</description>
        <calories>900</calories>
    </food>
    <food>
        <name itemid="41">French Toast</name>
        <price>4.50</price>
        <description>Thick slices made from our
homemade sourdough bread</description>
        <calories>600</calories>
    </food>
</breakfast_menu>

Código Python: 
 

Python3

import xml.etree.ElementTree as ET
 
mytree = ET.parse('xmldocument.xml.txt')
myroot = mytree.getroot()
 
# iterating through the price values.
for prices in myroot.iter('price'):
    # updates the price value
    prices.text = str(float(prices.text)+10)
    # creates a new attribute
    prices.set('newprices', 'yes')
 
# creating a new tag under the parent.
# myroot[0] here is the first food tag.
ET.SubElement(myroot[0], 'tasty')
for temp in myroot.iter('tasty'):
    # giving the value as Yes.
    temp.text = str('YES')
 
# deleting attributes in the xml.
# by using pop as attrib returns dictionary.
# removes the itemid attribute in the name tag of
# the second food tag.
myroot[1][0].attrib.pop('itemid')
 
# Removing the tag completely we use remove function.
# completely removes the third food tag.
myroot.remove(myroot[2])
 
mytree.write('output.xml')

Producción: 
 

Publicación traducida automáticamente

Artículo escrito por anuragnaren2108 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *