Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-09-2017
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Creando interface XML con XML DataBinding

Estimados, buenas tardes a todos !. a ver si alguien puede echarme una mano.

He creado una plantilla de un documento XML para después poder importarlo a un proyecto con el objetivo de crear los objetos y poder leerlo desde una aplicación cliente de un WebServices.

La estructura es sencilla:

Código Delphi [-]

      1
      "SERV1"
      "SERVICIO1"
      2
      "SERV2"
      "SERVICIO2"      

una vez que creo el documento uso la opción de delphi "XML DantaBinding" y lo que me está sucediendo es que los valores de alias y service_name me los toma como una colección o array de tipo de datos Integer al crear la interface.

Código Delphi [-]
{ IXMLServiceListType }

  IXMLServiceListType = interface(IXMLNode)
    ['{E1B6D7EE-7CE9-41A7-8CEE-6EC032EC845C}']
    { Property Accessors }
    function Get_Id_service: IXMLIntegerList;
    function Get_Alias: IXMLIntegerList;
    function Get_Name_service: IXMLIntegerList;
    { Methods & Properties }
    property Id_service: IXMLIntegerList read Get_Id_service;
    property Alias: IXMLIntegerList read Get_Alias;
    property Name_service: IXMLIntegerList read Get_Name_service;
  end;

{ IXMLIntegerList }

  IXMLIntegerList = interface(IXMLNodeCollection)
    ['{D12E15F7-DC94-4604-84FB-C50DD255BDA1}']
    { Methods & Properties }
    function Add(const Value: Integer): IXMLNode;
    function Insert(const Index: Integer; const Value: Integer): IXMLNode;

    function Get_Item(Index: Integer): Integer;
    property Items[Index: Integer]: Integer read Get_Item; default;
  end;

{ Forward Decls }

  TXMLServiceListType = class;
  TXMLIntegerList = class;

{ TXMLServiceListType }

  TXMLServiceListType = class(TXMLNode, IXMLServiceListType)
  private
    FId_service: IXMLIntegerList;
    FAlias: IXMLIntegerList;
    FName_service: IXMLIntegerList;
  protected
    { IXMLServiceListType }
    function Get_Id_service: IXMLIntegerList;
    function Get_Alias: IXMLIntegerList;
    function Get_Name_service: IXMLIntegerList;
  public
    procedure AfterConstruction; override;
  end;

{ TXMLIntegerList }

  TXMLIntegerList = class(TXMLNodeCollection, IXMLIntegerList)
  protected
    { IXMLIntegerList }
    function Add(const Value: Integer): IXMLNode;
    function Insert(const Index: Integer; const Value: Integer): IXMLNode;

    function Get_Item(Index: Integer): Integer;
  end;

Da igual si en el xml tengo las comillas o no, siempre me toma los tres campos como enteros. alguna idea ?. Gracias.
Responder Con Cita
  #2  
Antiguo 09-09-2017
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Disculpen por usar mal la etiqueta en el XML, la información sería esta:

<ServiceList>
<id_service>1</id_service>
<alias>"SERV1"</alias>
<name_service>"SERVICIO1"</name_service>
<id_service>2</id_service>
<alias>"SERV2"</alias>
<name_service>"SERVICIO2"</name_service>
</ServiceList
Responder Con Cita
  #3  
Antiguo 09-09-2017
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Me autorespondo.

He cambiado en la interface el tipo de datos manualmente que retornan los valores de los campos del XML y me ha
funcionado bien. serían estos los cambios:

Código Delphi [-]
    function Get_Item(Index: Integer): WideString;
    property Items[Index: Integer]: WideString read Get_Item; default;
Responder Con Cita
  #4  
Antiguo 09-09-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Podes cambiarlo manualmente o mientras estas con el wizard te da la opcion de definir el tipo de datos

Ten en cuenta que el asistente lo que hace es tratar de "adivinar", interpretando el xml, cual seria el tipo de datos mas adecuado, si le das el valor 1 lo mas logico es que lo tome como integer
Responder Con Cita
  #5  
Antiguo 10-09-2017
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias, pero ya lo había intentado y solo me despliega en los tres campo el tipo "Integer", quizá no lo esté haciendo correctamente yo le doy click al botón opciones del asistente pero no estoy claro de como hacer los cambios, podrías explicarlo ?. Gracias
Responder Con Cita
  #6  
Antiguo 11-09-2017
tmsanchez tmsanchez is offline
Miembro
 
Registrado: abr 2004
Ubicación: Mexico
Posts: 67
Poder: 21
tmsanchez Va por buen camino
Probablemente este enfoque (usando RTTI) te sea de utilidad.

http://robstechcorner.blogspot.mx/20...sic-usage.html

Sería cuestión de que verificaras el tipo de dato para llenaro de forma correcta.

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Uses en Interface e Implementation bumiga OOP 5 31-07-2012 10:32:58
¿lazarus puede importar archivos XSD hacer databinding? JXJ Lazarus, FreePascal, Kylix, etc. 0 17-08-2011 06:30:30
diseño de interface lookmydoom OOP 2 15-10-2006 09:13:55
colores de interface pablo Gráficos 2 07-03-2005 14:43:58
Interface Delphi 7 silviodp Varios 1 24-12-2004 00:44:10


La franja horaria es GMT +2. Ahora son las 22:40:27.


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
Copyright 1996-2007 Club Delphi