Descargar Xml Y Leerlo Con Xmlread


Objetivo: 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
Perfil MP  
Objetivo: 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.

Objetivo: 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!

Perfil MP  
Objetivo: 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

Perfil MP  
Ayortano
Objetivo: 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!

Objetivo: 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

Perfil MP  
Objetivo: 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.-

Perfil MP  
Objetivo: 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
Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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.-

Perfil MP  

Página 1 de 1


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 1.4886s (PHP: -91% SQL: 191%)
Consultas SQL: 47 - Debug off - GZIP Activado