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.

Python XML – Iterar a través de elementos, y si se cumple la condición del atributo, agregar ese elemento con todos sus hijos a la lista.

Tengo un script que supuestamente filtra algunos elementos de un archivo XML. Lo hice de esta manera porque sabía exactamente cuál es la profundidad del elemento y cuántos hijos tiene…
Pero ¿puedes darme un ejemplo de cómo se puede hacer esto sin conocer la profundidad del anidamiento?

El código se ve así:

def Filter_Modules(nombre_carpeta, lista_correspondiente):
    for elemento in delta_root.iter('folder'):
        if elemento.attrib.get('name') == str(nombre_carpeta):
            lista_correspondiente.append(elemento)
            for hijo in elemento:
                lista_correspondiente.append(hijo)
                for ch in hijo:
                    lista_correspondiente.append(ch)
                    for c in ch:
                        lista_correspondiente.append(c)

Todas las sugerencias son bienvenidas…

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de filtrar elementos de un archivo XML sin conocer la profundidad del anidamiento es utilizando funciones recursivas. Aquí tienes un ejemplo de cómo se puede hacer esto:

    def filter_elements(xml_element, corresponding_list):
        if xml_element.tag == 'folder':
            if xml_element.attrib.get('name') == folder_name:
                corresponding_list.append(xml_element)
        for child in xml_element:
            filter_elements(child, corresponding_list)
    

    En esta función, comprobamos si la etiqueta del elemento XML actual es ‘folder’. Si lo es, comprobamos si su atributo ‘name’ coincide con el nombre de la carpeta especificado. Si coincide, lo agregamos a nuestra lista correspondiente.

    Luego iteramos a través de todos los hijos del elemento XML y aplicamos la misma función filter_elements de forma recursiva a cada hijo.

    De esta manera, podemos filtrar todos los elementos que cumplan con un criterio determinado, independientemente de su profundidad de anidamiento.

Comments are closed.