Foros del Web » Programando para Internet » Python »

error de empty list con xmldom...

Estas en el tema de error de empty list con xmldom... en el foro de Python en Foros del Web. Saludos compañeros, Estoy desarrollando una pequeña aplicacion en python la cual lee datos de un XML, los guarda en variables y los tengo que subir ...
  #1 (permalink)  
Antiguo 03/10/2011, 09:03
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 15 años, 10 meses
Puntos: 0
error de empty list con xmldom...

Saludos compañeros,
Estoy desarrollando una pequeña aplicacion en python la cual lee datos de un XML, los guarda en variables y los tengo que subir a una base de datos.
El problema que me tiene atascado es que algunas veces los campos del XML pueden venir vacios y cuando esto pasa, al tratar de leerlos me da este error:

categoria_1 = nodo.getElementsByTagName("categoria_1")[0].childNodes[0].data
IndexError: list index out of range


El codigo es asi:

Código:
def obtener_valores(): 
     nodos = xmldoc.childNodes[0].getElementsByTagName("producto")
    #recorrer los nodos para obtener las variables
    for nodo in nodos:
        codigo = nodo.getElementsByTagName("codigo")[0].childNodes[0].data             
        partNumber = nodo.getElementsByTagName("number")[0].childNodes[0].data
Gracias de antemano.
  #2 (permalink)  
Antiguo 03/10/2011, 09:10
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: error de empty list con xmldom...

Te recomendaría usar mas lxml que el minidom de python.

Fuera de eso puedes hacer lo siguiente:
Código Python:
Ver original
  1. categoria_1 = nodo.getElementsByTagName("categoria_1")
  2. if(categoria_1 and categoria_1[0].childNodes):
  3.     print categoria_1.childNones[0].data

O también puedes usar excepciones.
  #3 (permalink)  
Antiguo 03/10/2011, 10:05
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: error de empty list con xmldom...

Cita:
Iniciado por razpeitia Ver Mensaje
Te recomendaría usar mas [URL="http://lxml.de/"]lxml[/URL] que el minidom de python.

Fuera de eso puedes hacer lo siguiente:
Código Python:
Ver original
  1. categoria_1 = nodo.getElementsByTagName("categoria_1")
  2. if(categoria_1 and categoria_1[0].childNodes):
  3.     print categoria_1.childNones[0].data

O también puedes usar excepciones.

Gracias pero probando ahora me salta este error:
print categoria_1.childNones.data
AttributeError: 'NodeList' object has no attribute 'childNones'

Muchas gracias por tu ayuda.
  #4 (permalink)  
Antiguo 03/10/2011, 10:22
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: error de empty list con xmldom...

Código Python:
Ver original
  1. categoria_1 = nodo.getElementsByTagName("categoria_1")
  2. if(categoria_1 and categoria_1[0].childNodes):
  3.     print categoria_1.childNodes[0].data

Fue un error de copiar y pegar, en lugar de Nodes puse Nones.
Aunque si estas haciendo un programa que parsea xml y después lo sube a una base de datos este error debió de ser muy fácil de detectar.
  #5 (permalink)  
Antiguo 03/10/2011, 10:52
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: error de empty list con xmldom...

OK muchas gracias, aunque despues de hablarme de lxml estoy haber si aprendo un poco de esto que me parece mucho mejor aunque no veo mucha documentacion de como estraer valores con ello.
  #6 (permalink)  
Antiguo 03/10/2011, 12:06
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: error de empty list con xmldom...

Solucionado.

Etiquetas: empty, list
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:58.