es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agregando un elemento hermano después de un elemento hijo en XML utilizando Element Tree.

He creado un elemento usando Elementtree. Quiero añadir este elemento después de un nombre de usuario. Encontré el nombre de usuario que quería, pero no puedo añadir el elemento después de ese nombre de usuario.

Mi código:

import xml.etree.ElementTree as ET

root = ET.parse("sample.xml")

feature_list = ET.Element('FeatureList')

for f in range(0,5):
    ele = ET.SubElement(feature_list, 'FeatureDetail')
    sub_ele = ET.SubElement(ele, 'FeatureId')
    sub_ele.text = str(f)

for UserName in root.findall('.//UserName'):
    if(UserName.text == 'john@abc.com'):
        Sibling = Sibling.UserName
        Sibling.append(feature_list)

No hay ningún comando “sibling” en Elementtree. ¿Cómo puedo añadir un elemento después del nombre de usuario que encontré? Gracias de antemano. Quiero la solución utilizando solo Elementtree, no lxml.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar un elemento después de un nombre de usuario específico en ElementTree, puedes usar el método insert() del elemento padre. Aquí tienes un ejemplo de código para lograr esto:

    import xml.etree.ElementTree as ET
    
    # Analiza el archivo XML
    tree = ET.parse("sample.xml")
    root = tree.getroot()
    
    # Crea el nuevo elemento para agregar
    feature_list = ET.Element('FeatureList')
    for f in range(0, 5):
        ele = ET.SubElement(feature_list, 'FeatureDetail')
        sub_ele = ET.SubElement(ele, 'FeatureId')
        sub_ele.text = str(f)
    
    # Encuentra el nombre de usuario al que se le agregará
    username_to_find = 'john@abc.com'
    for user in root.findall('.//UserName'):
        if user.text == username_to_find:
            # Agrega el nuevo elemento después del nombre de usuario encontrado
            user_parent = user.getparent()
            user_index = user_parent.index(user)
            user_parent.insert(user_index + 1, feature_list)
            break  # salir del bucle después de agregar el elemento
    
    # Escribe el archivo XML actualizado
    tree.write("updated.xml", encoding="utf-8", xml_declaration=True)
    

    Aquí, primero analizamos el archivo XML y creamos el nuevo elemento feature_list para agregar. Luego recorremos todos los elementos UserName y encontramos el que queremos agregar el nuevo elemento después. Una vez lo encontramos, obtenemos su elemento padre (user_parent) y su índice en el padre (user_index), y usamos el método insert() para agregar el nuevo elemento después del nombre de usuario encontrado. Salimos del bucle una vez que se agrega el elemento para evitar agregarlo varias veces si hay varios nombres de usuario con el mismo texto. Por último, escribimos el archivo XML actualizado en el disco.

Comments are closed.