PDA

Ver la Versión Completa : webservices+delphi+xml help


cirilungol
23-09-2008, 15:50:52
Ante todo wenas.

Tengo un problema, como bien habreis visto en el titulo de este post.
Que tengo que hacer, para sacar los datos de un XML que está alojado en un servidor web.

He probado SOAP pero no encuentro por ninguna parte una forma de asignarle la URL y el XML en cuestión o el que necesite.

En el Libro de Delphi Kylix llegué a encontrar una referencia estupenda a este dilema, pero por desgracia el libro no lo tengo al alcance de mi mano y no me acuerdo lo que hice en su dia.


Saludos a Todos y pasarlo bien

jhonny
23-09-2008, 16:00:17
En el blog de egostar tienes un instructivo detallado del asunto http://eliseogn.wordpress.com/2008/08/02/6/

cirilungol
23-09-2008, 16:08:53
En el blog de egostar tienes un instructivo detallado del asunto http://eliseogn.wordpress.com/2008/08/02/6/


Gracias por tu premura, pero este ejemplo es para D8, y sinceramente no me vale, aun siguiendo los pasos para D7, tengo que colar la aplicacion del WebService para D7, que es la herramienta que uso.

El problema que tengo con las SOAP esque no tengo forma de como apuntar a un xml y despues mostrar su contenido o lo que necesite de el. Recordar que este xml ha de estar en un servidor WEB.

Gracias nuevamente espero las respuestas como agua de mayo.

jhonny
23-09-2008, 16:12:42
En D7 se hace igual, que como los ejemplos que ha mostrado egostar en su Blog.

egostar
23-09-2008, 16:15:27
Hola

Podrias ser mas especifico en tu plantreamiento, ya tienes creado el servicio web y solo quieres recuperar el XML del Servicio Web?

Salud OS

cirilungol
23-09-2008, 16:18:59
Si no me he expresado bien perdón.

Efectivamente el ejemplo es correcto, pero el ejemplo es sobre unos procedimientos. No me sirven ya que mi finalidad es llegar al XML.


El servicio web no lo tengo creado, o si lo creo llega un momento que no se donde meterle mano para poder acceder al fichero XML en cuestión alojado en un servidor web.


Gracias por las molestias

egostar
23-09-2008, 16:38:43
Si no me he expresado bien perdón.

Efectivamente el ejemplo es correcto, pero el ejemplo es sobre unos procedimientos. No me sirven ya que mi finalidad es llegar al XML.


El servicio web no lo tengo creado, o si lo creo llega un momento que no se donde meterle mano para poder acceder al fichero XML en cuestión alojado en un servidor web.


Gracias por las molestias

Hola

Quieres decir que tu tienes archivos XML en el servidor y quieres a través de un webservice leerlos y procesar la info contenida en esos archivos?

Salud OS

jhonny
23-09-2008, 16:41:15
No recuerdo si en D7 existia el "XML Data Binding", pero aporece ser que es lo que necesitas ;).

Abre un Proyecto nuevo y buscalo dentro de File|New|Others, en la pestaña XML debería estar.

cirilungol
23-09-2008, 16:44:00
Hola

Quieres decir que tu tienes archivos XML en el servidor y quieres a través de un webservice leerlos y procesar la info contenida en esos archivos?

Salud OS


Esa es la idea, exacto acceder a los datos que contiene el XML alojado en un servidor Web.

Y por el tema del XML binding pues ahora lo miro asias miles

egostar
23-09-2008, 16:44:24
No recuerdo si en D7 existia el "XML Data Binding", pero aporece ser que es lo que necesitas ;).

Abre un Proyecto nuevo y buscalo dentro de File|New|Others, en la pestaña XML debería estar.

Hey amigo jhonny porque estas en estado invisible :eek:

Salud OS

Gracias por el enlace a mi blog :)

egostar
23-09-2008, 16:46:08
Esa es la idea, exacto acceder a los datos que contiene el XML alojado en un servidor Web.

Y por el tema del XML binding pues ahora lo miro asias miles

Pues ya tienes todo para comenzar, ya una vez jhonny me enseño a usar esos data binding y son excelentes ;)

Salud OS

cirilungol
23-09-2008, 19:58:05
Weno he hecho pruebas con el data binding, no me aclaro, le meto la url donde esta el xml y me genera un .pas pero no puedo hacer nada, no es lo que busco.


No se como explicarme. Quiero conectarme a un xml y leer su contenido, y como he dicho antes ese xml esta alojado en un servidor web.

Ahora como lo hago, con las SOAP he probado de todo y ya me he perdido y con las XMlBindings idem. Help me more please!!!

No puedo ni mostraros codigo porque no tengo nada, de todo lo que he hecho na de na.


Weno Saludos y sorry por el cansismo.

jhonny
23-09-2008, 20:03:37
El DataBinding te genera una unidad, en ella debe haber un metodo llamado loadaddress que recibe como parametro la ruta de donde se encuentra el XML en cuestión y te retorna un TXMLNoRecuerdoQue, que es la estructura de tu XML, de esa forma ya tienes grabado en memoria el asunto y puedes manipularle ;).

cirilungol
23-09-2008, 20:11:19
Machina man, Ok mañana sin falta me pongo en lo que me dices, a ver si puedo sacar algo en claro y lo posteo por aqui.

Saludos

cirilungol
23-09-2008, 20:13:51
PD: Si genera una unidad... es una unidad fija con ese xml... pero y si quiero cargar otro en ejecucion?... osease como cargar otro dataset con otros datos....

:confused:

jhonny
23-09-2008, 20:17:20
PD: Si genera una unidad... es una unidad fija con ese xml... pero y si quiero cargar otro en ejecucion?... osease como cargar otro dataset con otros datos....

:confused:

Si tiene la misma estructura debe funcionar sin problema.

cirilungol
24-09-2008, 08:31:43
Testas ganando el cielo jhonny :), de todas formas el data binding no me acaba de convercer, ya que por mi desgracia, son varios los xml que me puedo encontrar.

Que podria hacer, para cargar dichos xml

http://camilovi-heroes.com/xml_datos/20070221_130454632_Request.xml
http://camilovi-heroes.com/xml_datos/Response.xml

Hago 2 Databindings, y en codigo les añado los diferentes xml, segun sean response o request?
Pueden ser 100 de tipo Request y otros tantos de tipo Response, pero tambien pueden haber de tipo msn.

.... esa seria la orientacion correcta y final??

Gracias

cirilungol
24-09-2008, 09:08:23
Nada siento seguir dando la matraca, pero por lo menos veais lo que intento hacer, o lo que estoy haciendo con el DataBinding

parto de este xml

http://camilovi-heroes.com/gallery.xml


esto es lo que me genera el data Binding, lo solapo a un proyecto uniendo el pas creado, y busco la manera de asignarle otro gallery.xml que no es el original pero tiene la misma estructura.

encuentro esto en el pas del Data Binding


{ Forward Decls }

IXMLTiltviewergalleryType = interface;
IXMLPhotosType = interface;
IXMLPhotoType = interface;

{ IXMLTiltviewergalleryType }

IXMLTiltviewergalleryType = interface(IXMLNode)
['{419B47F1-8ED4-4F36-B5B7-27757DA445B7}']
{ Property Accessors }
function Get_Photos: IXMLPhotosType;
{ Methods & Properties }
property Photos: IXMLPhotosType read Get_Photos;
end;

{ IXMLPhotosType }

IXMLPhotosType = interface(IXMLNodeCollection)
['{4915F1B3-F52E-410E-B03C-DC05C24BBA44}']
{ Property Accessors }
function Get_Photo(Index: Integer): IXMLPhotoType;
{ Methods & Properties }
function Add: IXMLPhotoType;
function Insert(const Index: Integer): IXMLPhotoType;
property Photo[Index: Integer]: IXMLPhotoType read Get_Photo; default;
end;

{ IXMLPhotoType }

IXMLPhotoType = interface(IXMLNode)
['{3B0E616B-38C0-4704-A2A0-4EB1EE1CF783}']
{ Property Accessors }
function Get_Imageurl: WideString;
function Get_Linkurl: WideString;
function Get_ShowFlipButton: WideString;
function Get_Title: WideString;
function Get_Description: WideString;
procedure Set_Imageurl(Value: WideString);
procedure Set_Linkurl(Value: WideString);
procedure Set_ShowFlipButton(Value: WideString);
procedure Set_Title(Value: WideString);
procedure Set_Description(Value: WideString);
{ Methods & Properties }
property Imageurl: WideString read Get_Imageurl write Set_Imageurl;
property Linkurl: WideString read Get_Linkurl write Set_Linkurl;
property ShowFlipButton: WideString read Get_ShowFlipButton write Set_ShowFlipButton;
property Title: WideString read Get_Title write Set_Title;
property Description: WideString read Get_Description write Set_Description;
end;

{ Forward Decls }

TXMLTiltviewergalleryType = class;
TXMLPhotosType = class;
TXMLPhotoType = class;

{ TXMLTiltviewergalleryType }

TXMLTiltviewergalleryType = class(TXMLNode, IXMLTiltviewergalleryType)
protected
{ IXMLTiltviewergalleryType }
function Get_Photos: IXMLPhotosType;
public
procedure AfterConstruction; override;
end;

{ TXMLPhotosType }

TXMLPhotosType = class(TXMLNodeCollection, IXMLPhotosType)
protected
{ IXMLPhotosType }
function Get_Photo(Index: Integer): IXMLPhotoType;
function Add: IXMLPhotoType;
function Insert(const Index: Integer): IXMLPhotoType;
public
procedure AfterConstruction; override;
end;

{ TXMLPhotoType }

TXMLPhotoType = class(TXMLNode, IXMLPhotoType)
protected
{ IXMLPhotoType }
function Get_Imageurl: WideString;
function Get_Linkurl: WideString;
function Get_ShowFlipButton: WideString;
function Get_Title: WideString;
function Get_Description: WideString;
procedure Set_Imageurl(Value: WideString);
procedure Set_Linkurl(Value: WideString);
procedure Set_ShowFlipButton(Value: WideString);
procedure Set_Title(Value: WideString);
procedure Set_Description(Value: WideString);
end;

{ Global Functions }

function Gettiltviewergallery(Doc: IXMLDocument): IXMLTiltviewergalleryType;
function Loadtiltviewergallery(const FileName: WideString): IXMLTiltviewergalleryType;
function Newtiltviewergallery: IXMLTiltviewergalleryType;



Pero desde la unidad Main no encuentro la funcion para poder decirle de que XMl ha de captar los datos.
Y tambien para variar recorrer ese gallery.xml y sacar todos los datos correctamente.

de veras que estoy mas perdido que un piojo en una calva.

Help please

cirilungol
24-09-2008, 10:20:03
Me voy a contestar a mi mismo, asi tambien puedo empujar un poco con el tema


procedure TForm1.Button1Click(Sender: TObject);
var
ListaFotos: IXMLTiltviewergalleryType;
INodo: Integer;
begin

ListaFotos:= Loadtiltviewergallery(Edit1.Text);

with ListaFotos do begin
for INodo := 0 to Photos.Count -1 do
mPhoto.Lines.Add(Photos.Photo[INodo].Title);
//ShowMessage(intToStr(Photos.Count));

end;


end;


Edit1.text es la ubicación donde se halla el xml cuya estrcuctura creada coincide con la del Data Binding.

Sigo haciendo pruebas de momento esto me va