Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Esto es un xml?¿y como se puede leer? (https://www.clubdelphi.com/foros/showthread.php?t=76532)

comba 07-11-2011 23:12:07

¿Esto es un xml?¿y como se puede leer?
 
Hola a todos

Utilizo D6 y estoy consumiendo un web service. Todo funciona bien y el web service me devuelve un xml, si se puede decir eso, ya que no he trabajado casi nada con los xml, pero no se parece mucho a los ejemplos que veo por internet.
¿Como puedo extraer los datos de cada linea?

<consulta_usuarios>
<nombre_apellidos ="jose xxxx" alias_clubdelphi="comba" ciudad_residencia="Valencia"/>
<nombre_apellidos ="Pepe Luis xxxx" alias_clubdelphi="delphi" ciudad_residencia="Barcelona"/>
</consulta_usuarios>

Un saludo y muchas gracias.

kuray 08-11-2011 01:04:52

No recuerdo en qué paleta está en D6, pero busca un componente llamado TXMLDoc o TXMLDocument. Puede que esté en la paleta de Internet.

para leer los datos, busca IXMLNode en la ayuda, o en el foro, que hay varios ejemplos.

Neftali [Germán.Estévez] 08-11-2011 10:44:50

Hay una forma muy sencilla, de cargar los datos de un XML a un TDataset para trabajar con ellos. Delphi trae una herramienta llamada XMLMapper. Échale un vistazo a esta entrada y verás que es sencilla de utilizar.

roman 08-11-2011 15:56:32

Por otro lado, se supone que Delphi tiene herramientas especiales para manejar servicios Web. Estas herramientas se encargan, entre otras cosas, de mapear los xml en clases listas para usar en código.

Lo que no sé es si Delphi 6 está preparado para trabajar con las versiones más recientes de los servicios web.

// Saludos

egostar 08-11-2011 18:33:52

Cita:

Empezado por roman (Mensaje 417902)
Por otro lado, se supone que Delphi tiene herramientas especiales para manejar servicios Web. Estas herramientas se encargan, entre otras cosas, de mapear los xml en clases listas para usar en código.

Lo que no sé es si Delphi 6 está preparado para trabajar con las versiones más recientes de los servicios web.

// Saludos

Hola roman

Esto depende de que el webservice regrese la información en una clase TRemotable con cierta estructura y al generar el wsdl con el importador que tiene Delphi automáticamente genera la clase para obtener los datos, pero algunos webservice lo que regresan es el "texto" del XML en una variable widestring y tocará utilizar el componente IXMLDocument y IXMLNode como ya lo han mencionado. Si comba hace una búsqueda en ClubDelphi hay muchos ejemplos de su uso.

Saludos

roman 08-11-2011 19:27:52

Hola Eliseo, gusto en leerte.

No estoy muy de acuerdo con esto que comentas. Un servicio web sólo sabe de xml, que es el lenguaje en que se comunica (las peticiones, las repuestas y los tipos de datos están especificados con xml, y el xml es, a fin de cuentas, una cadena de texto); es Delphi quien se encarga de traducir el xml a una clase TRemotable.

Lo que pasa es que, según recuerdo, el impórtador wsdl de Delphi 6/7 no puede manejar la versión nueva del protocolo, aunque hay por ahí unos parches que lo hacen.

// Saludos

egostar 08-11-2011 19:58:17

Cita:

Empezado por roman (Mensaje 417939)
Hola Eliseo, gusto en leerte.

No estoy muy de acuerdo con esto que comentas. Un servicio web sólo sabe de xml, que es el lenguaje en que se comunica (las peticiones, las repuestas y los tipos de datos están especificados con xml, y el xml es, a fin de cuentas, una cadena de texto); es Delphi quien se encarga de traducir el xml a una clase TRemotable.

Lo que pasa es que, según recuerdo, el impórtador wsdl de Delphi 6/7 no puede manejar la versión nueva del protocolo, aunque hay por ahí unos parches que lo hacen.

// Saludos

Efectivamente roman, todo lo que pasa por un webservice es a través de SOAP que finalmente es un XML, el asunto es que si en el webservice se generan clases el wsdl contendrá dichas definiciones y el importador obtendrá las referencias adecuadas y podrás acceder a los datos a través de su propiedad, si en lugar de una clase regresan un string a pesar de que es un XML no cuentas con la definición de la clase por lo que tendrías que parsear el XML a través de lo que ya se mencionó.

Referente a la versión del protocolo SOAP, si, tienes razón, hasta Delphi2010 puedes acceder a la versión 1.1 del SOAP, a partir de XE ya puedes acceder a cualquier versión 1.1 o 1.2.

Edito: Por otro lado, habría que ver que comba utilice el Importador de wsdl, si utiliza por ejemplo curl, pues si, el RESPONSE es un string que se debe parsear si o si.

Saludos

comba 09-11-2011 20:10:30

Efectivamente como dice egostar lo que devuelve el webservice es un string a pesar de ser un xml.

Muchas gracias por vuestra colaboración, creo que ya tengo resuelto el problema.

roman 09-11-2011 20:23:55

Es bueno que hayas resuelto tu problema. Sin embargo, creo que no está de más notar que un web service devuelve su respuesta siempre como una respuesta HTTP, así que siempre será un texto (es decir, un string). Lo que sucede es que muchos web services están mal implementados y no definen bien el wsdl, razón por la cual el importador de delphi no puede funcionar.

// Saludos


La franja horaria es GMT +2. Ahora son las 08:49:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi