Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Descargar Xml Y Leerlo Con Xmlread
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Descargar Xml Y Leerlo Con Xmlread 
 
Hola gente! Soy completamente nuevo en gambas, y tengo la programacion como hobby (vengo de otras ciencia...)
Estoy tratando de bajar un xml de un sitio de internet, y "parsearlo"
Obtenerlo es sencillo, con el siguiente código lo logro (queda almacenado en una variable llamada buffer):

' gambas class file
PUBLIC url AS String

PUBLIC SUB Form_Open()
 DIM reader AS XmlReader
 DIM h AS HttpClient
 DIM buffer AS String
 DIM doc AS XmlDocument
 h = NEW HttpClient AS "h"
 h.URL = "http://8tracks.com/sets/460486803/play.xml?mix_id=2000"
 h.Async = FALSE
 h.Timeout = 60
 h.Get
 IF h.Status < 0 THEN
   PRINT "ERROR"
 ELSE
   ' Success - read the data
   IF Lof(h) THEN READ #h, buffer, Lof(h)
 END IF
 

El problema es que no se como pasar esa variable a un objeto xmlread para poder tratarla como un archivo xml y obtener la información que necesito...

Alguna solución?

Gracias!
Mato.-
 



 
última edición por mato el Jueves, 05 Agosto 2010, 00:06; editado 1 vez 
mato - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Descargar Xml Y Leerlo Con Xmlread 
 
Lo que sin dudas te puede ayudar mucho es leer el capítulo 7: XML, del libro "Programación visual con software libre", disponible en la sección de descargas.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Descargar Xml Y Leerlo Con Xmlread 
 
Gracias por responder!

El capitulo que mencionas lo lei. El inconveniente no es analizar el xml, sino como meter el xml descargado en el código que pegué, en un xml.read (por ejemplo) para poder, justamente utilizar los métodos correspondientes.

Si el xml lo leo de un archivo del disco, no hay drama. La sintaxis para abrirlo es xml.Open(User.Home & "/ejemplo.xml")
Ahora, lo que no se es como indicarle que en vez de abrirlo de un archivo lea el que tengo en la variable "buffer".

Saludos!
 



 
mato - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Descargar Xml Y Leerlo Con Xmlread 
 
Hola.

Puedes redireccionar lo que almacenaste en la variable Buffer a un archivo en tu directorio de usuario y luego leerlo con xml.read,etc.

PUBLIC SUB Main()
 DIM hArchivo AS file
 DIM reader AS XmlReader
 DIM h AS HttpClient
 DIM buffer AS String
 DIM doc AS XmlDocument
 h = NEW HttpClient AS "h"
 h.URL = "http://8tracks.com/sets/460486803/play.xml?mix_id=2000"
 h.Async = FALSE
 h.Timeout = 60
 h.Get
 IF h.Status < 0 THEN
   PRINT "ERROR"
 ELSE
   ' Success - read the data
   OPEN User.Home & "/ejemplo.xml" FOR WRITE CREATE AS #hArchivo
   IF Lof(h) THEN READ #h, buffer, Lof(h)
   PRINT #hArchivo, buffer
   END IF
   CLOSE #hArchivo
END


Te dejo este link en donde muestran como leer un xml.

http://furikao-gnulinux.blogspot.co...-de-un-xml.html

Saludos
 



 
abarzuaf - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Descargar Xml Y Leerlo Con Xmlread 
 
Puedes hacer lo que dice abarzuaf, pero recomendaría que usaras un archivo Temp$("Xml") por ejemplo, ya que se almacena en /tmp y se borra cuando termina tu aplicación. Claro, si lo quieres guardar en disco no va a servir lo que digo.

Saludos!
 



 
 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Descargar Xml Y Leerlo Con Xmlread 
 
Hay un método que no está documentado, pero que si funciona como creo, te ahorrará un montón de código:

FromString( Buffer As String, [URL as String] )


Para usarlo, supongo que basta con declarar una variable global "buffer" y pasar la URL como segundo argumento y el contenido xml se cargará en el objeto xmlReader. Después sólo tendrás que analizarlo con el resto de métodos que provee dicha clase. Se me ocurre este ejemplo:
 

DIM xml AS XmlReader
DIM miBuffer AS String ' esta puede ser global con PRIVATE
  
  xml.FromString(miBuffer, "http://8tracks.com/sets/460486803/play.xml?mix_id=2000")
  
  xml.Read()
  '...implementar métodos para leer nodos, etc...
  xml.Close()


Mira la clase XmlDocument, que también incorpora .FromString.

De esta forma te ahorras el código para descargar el xml de la web, aunque supongo que seguirá siendo necesario el componente gb.net.curl que debe usar tras bambalinas la clase xml---

No lo he probado, así que te paso la pelota para que lo pruebes y nos cuentes,

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Descargar Xml Y Leerlo Con Xmlread 
 
Muchas gracias por responder. Efectivamente, con fromstring se puede hacer, aunque no lo pude hacer directamente desde la web (será cuestión de investigar...no encuentro mucha documentación al respecto).

Pego como quedó el código funcionando, por si alguien tiene la misma duda:

PUBLIC SUB Form_Open()
  DIM reader AS XmlReader
  DIM h AS HttpClient
  DIM buffer AS String
  DIM doc AS XmlDocument
  h = NEW HttpClient AS "h"
  h.URL = "http://8tracks.com/sets/460486803/play.xml?mix_id=2000"
  h.Async = FALSE
  h.Timeout = 60
  h.Get
  
  PRINT "begin"
  IF h.Status < 0 THEN
    PRINT "ERROR"
  ELSE
    ' Success - read the data
    IF Lof(h) THEN READ #h, buffer, Lof(h)
    PRINT buffer
  END IF
  
  
  reader = NEW XmlReader
  '  La linea siguiente ante era reader.Open(User.home & "/8tracks.xml")
  reader.FromString(buffer)
  ' y acá se puede continuar trabajando con archivo un xml
 


También acá hacen una implementación de fromstring (bastante mejor que la mia, obvio).

Gracias!!!!
Mato.-
 



 
mato - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Descargar Xml Y Leerlo Con Xmlread 
 
Bueno, sigo con los problemas. Ahora para nevagar por el xml.
Como lo tomo con un xmldocument, que me permite cargar el xml con fromstring, y no con xmlreader, no se moverme por dentro del xml

Supongamos que tengo este archivo
<response>
  <status>200 OK</status>
  <set>
    <at-beginning>false</at-beginning>
    <at-end>false</at-end>
    <skip-allowed>true</skip-allowed>
    <track>
      <release-name>Justified</release-name>
      <faved-by-current-user>false</faved-by-current-user>
      <year nil="true"></year>
      <name>Rock Your Body</name>
      <play-duration>0</play-duration>
      <performer>Justin Timberlake</performer>
      <id>16952</id>
      <url>http://8tracks.s3.amazonaws.com/tf/000/016/952/Rock_Your_Body_mp3_887f6e637935be86c382.mp3</url>
    </track>
  </set>
  <notices nil="true"></notices>
  <logged-in>false</logged-in>
  <errors nil="true"></errors>
</response>


Y quiero ir viendo los nombres de cada uno de los elementos y llegar a encontrar, por ejemplo, el <performer>, como se hace?

Gracias!
M.-
 



 
última edición por mato el Viernes, 06 Agosto 2010, 03:33; editado 1 vez 
mato - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Descargar Xml Y Leerlo Con Xmlread 
 
Te dejo un ejemplo totalmente funcional que escribí para uno de mis programas. Además verás cómo hacer una descarga del fichero xml asíncrona, es decir, que no bloqueará la GUI del programa mientras descarga. Verás también cómo se manejan los eventos para realizar el trabajo de HttpClient. Y por último, sobre la línea 113, comprobarás cómo hice para leer los valores de los nodos y asignarlo a variables globales de clase (para su posterior uso como "Propiedades").

http://trac6.assembla.com/dfhlog/browser/trunk/QRZ.class

Lamento que el código no esté comentado, pero creo que no será difícil de entender.

Te dejo también las especificaciones del xml que se utiliza. (Es un servicio de pago por suscripción, por eso hay dos pasos en la lectura del xml, uno para obtener una llave válida y otro para leer datos propiamente).

http://www.qrz.com/XML/current_spec.html

Puede ser denso para entender, pero si tienes dudas vuelve a preguntar.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Descargar Xml Y Leerlo Con Xmlread 
 
Jesús, muchísimas gracias por toda la información. Lo voy a leer detenidamente, y cualquier duda, te consulto nuevamente!

Saludos!
Mato.-
 



 
mato - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Descargar E Instalar Paquetes techm3 General 3 Lunes, 07 Junio 2010, 08:25 Ver último mensaje
shordi
No hay nuevos mensajes Socket En Internet, Descargar razaAztk General 3 Lunes, 04 Julio 2011, 05:29 Ver último mensaje
soplo
No hay nuevos mensajes Descargar Imagenes drjuano Aplicaciones/Fragmentos de Código 2 Jueves, 06 Diciembre 2012, 13:20 Ver último mensaje
Dani26
No hay nuevos mensajes Descargar Ayuda ahtonio Shell Scripting 14 Miercoles, 02 Julio 2014, 20:01 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron