Python - xml.etree.cElementTree.parse('file.xml').getroot() tras remove no actualiza

 
Vista:
sin imagen de perfil
Val: 9
Ha disminuido su posición en 8 puestos en Python (en relación al último mes)
Gráfica de Python

xml.etree.cElementTree.parse('file.xml').getroot() tras remove no actualiza

Publicado por A (2 intervenciones) el 21/07/2020 11:54:30
Hola a tod@s

xml.etree.cElementTree.parse('file.xml').getroot() tras remove no actualiza:

Lo explico:

1
2
3
4
5
6
7
8
9
10
root = xml.etree.cElementTree.parse('file.xml').getroot()
iterador = root.findall("./busquedas/alimento")  ' Hay 261 Elementos -alimento-
cB=0
for itemB in iterador:
     if itemB.text == 'patata':
         posicion = cB
         iterador.remove(itemB) ' tras esto hay en iterador 260 Elementos, esto es correcto
         iteradorC = root.findall("./busquedas/alimento") ' ahora con esta linea nuevamente hay 261 Elemento -No    actualiza- -¿por que?
         break

Gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jaime
Val: 351
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

xml.etree.cElementTree.parse('file.xml').getroot() tras remove no actualiza

Publicado por Jaime (88 intervenciones) el 21/07/2020 12:40:21
No te actualiza porque estás buscando o removiendo en la variable equivocada.
Me explico: Estas asignando a iterador una lista tipo iterator, eliminas un elemento de la lista iterador y creas una nueva lista a partir del elemento root con el que creaste iterador pero que nunca modificaste, porque el que eliminastes fue un elemento de iterador y no de root.
Espero me hayas entendido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 9
Ha disminuido su posición en 8 puestos en Python (en relación al último mes)
Gráfica de Python

xml.etree.cElementTree.parse('file.xml').getroot() tras remove no actualiza

Publicado por A (2 intervenciones) el 21/07/2020 12:58:02
Gracias, jaime.

Gracias a otro código que he buscado es exactamente lo que tu dices.

Lo voy a explicar como lo he resuelto pero no valoreis mi código ya que estoy optimizandolo para que sea mas limpio y claro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root = xml.etree.cElementTree.parse('file.xml').getroot()
iterador = root.findall("./busquedas/alimento")  ' Hay 261 Elementos -alimento-
cB=0
listaB = list()
for itemB in iterador:
     if itemB.text == 'patata':
         posicion = cB
         #iterador.remove(itemB) ' tras esto hay en iterador 260 Elementos, esto es correcto
         listaB.append(itemB) ' añado en una lista lo que deseo borrar
         for tag in listaB: 'como siempre es un elemento se puede resolver llamando directamente a este elemento en vez de -tag-
               parent = root.find('busquedas')
               parent.remove(tag)
         iteradorC = root.findall("./busquedas/alimento") ' ahora hay 260 Elemento, ya esta bien
         break

Saludos y espero que le sirva esta solución a alguien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar