Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Creando interface XML con XML DataBinding (https://www.clubdelphi.com/foros/showthread.php?t=92261)

cmfab 09-09-2017 21:59:30

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.

cmfab 09-09-2017 22:00:33

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

cmfab 09-09-2017 22:14:00

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;

AgustinOrtu 09-09-2017 23:59:55

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

cmfab 10-09-2017 16:15:41

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

tmsanchez 11-09-2017 18:57:56

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.

cmfab 12-09-2017 15:32:21

Muchas Gracias, lo revisaré a la brevedad. Saludos !


La franja horaria es GMT +2. Ahora son las 18:30:05.

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