Foros del Web » Programando para Internet » Python »

Obtener valor de un XML

Estas en el tema de Obtener valor de un XML en el foro de Python en Foros del Web. Saludos compañeros, Tengo un XML de este tipo: Código: <?xml version='1.0' encoding='ISO-8859-1'?> <articulos> <articulo ref='10130'> <stock_disponible>2</stock_disponible> </articulo> <articulo ref='11096'> <stock_disponible>6</stock_disponible> </articulo> </articulos> </xml> Utilizo este ...
  #1 (permalink)  
Antiguo 07/08/2012, 10:05
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 0
Obtener valor de un XML

Saludos compañeros,
Tengo un XML de este tipo:
Código:
<?xml version='1.0' encoding='ISO-8859-1'?>
<articulos>
<articulo ref='10130'>
<stock_disponible>2</stock_disponible>
</articulo>
<articulo ref='11096'>
<stock_disponible>6</stock_disponible>
</articulo>
</articulos>
</xml>
Utilizo este codigo para llegar al articulo que me interesa con una referencia, pero una vez allí no se como obtener el stock_disponible (sólo quiere obtener el valor dentro de las etiquetas de <stock_disponible>):
Código:
def obtenerStock(referencia):
    try:
        #encontramos el fichero de stock
        xmlstock = minidom.parse("productos_xml_stock.xml")
        for data in xmlstock.getElementsByTagName("articulo"):
            if referencia == data.attributes['ref'].value:              
                 stock = data.childNodes[1].toxml()
                 return stock
            else:
                 stock = 0
    except ValueError:
        print "No se ha encontrado el fichero de stocks..."
Muchas gracias de antemano
__________________
# "El software es un gas: se expande hasta llenar su contenedor"
-- Nathan Myhrvold
  #2 (permalink)  
Antiguo 07/08/2012, 13:32
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Obtener valor de un XML

Te recomendaría usar lxml junto con xpaths para parsear los datos de forma mas rápida y eficiente.

Código Python:
Ver original
  1. from xml.dom import minidom
  2.  
  3. def getText(nodelist):
  4.     rc = []
  5.     for node in nodelist:
  6.         if node.nodeType == node.TEXT_NODE:
  7.             rc.append(node.data)
  8.     return ''.join(rc)
  9.  
  10. def obtenerStock(referencia):
  11.     try:
  12.         #encontramos el fichero de stock
  13.         xmlstock = minidom.parse("a.xml")
  14.         articulos = xmlstock.getElementsByTagName("articulo")
  15.         for articulo in articulos:
  16.             if referencia == articulo.attributes['ref'].value:
  17.                  stocks = articulo.getElementsByTagName("stock_disponible")
  18.                  stock = stocks[0]
  19.                  stock = int(getText(stock.childNodes))
  20.                  return stock
  21.             else:
  22.                  stock = 0
  23.     except ValueError:
  24.         print "No se ha encontrado el fichero de stocks..."
  25.  
  26. print obtenerStock('10130')
  27. print obtenerStock('11096')

Código XML:
Ver original
  1. <?xml version='1.0'?>
  2. <articulos>
  3.     <articulo ref='10130'>
  4.         <stock_disponible>2</stock_disponible>
  5.     </articulo>
  6.  
  7.     <articulo ref='11096'>
  8.         <stock_disponible>6</stock_disponible>
  9.     </articulo>
  10. </articulos>
  #3 (permalink)  
Antiguo 08/08/2012, 08:52
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Obtener valor de un XML

Muchas gracias.
Voya probarlo pues.
__________________
# "El software es un gas: se expande hasta llenar su contenedor"
-- Nathan Myhrvold

Etiquetas: chilnodes, xml
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 15:23.