Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Bibliotecas de código fuente > [GH Freebrary]
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 17-12-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Javier.

La estructura de ese archivo es bastante sencilla, y combinando TghXMLDoc con XPath es muy fácil leer los datos.

Preparé este ejemplo pensando en tu caso:
Código Delphi [-]
uses
  Forms, DB, DBClient, Controls, Grids, DBGrids, StdCtrls, Classes,
  GHFXMLDoc;

type
  TForm1 = class(TForm)
    mm1: TMemo;
    mm2: TMemo;
    Label1: TLabel;
    Button1: TButton;
    gr1: TDBGrid;
    ds1: TDataSource;
    dt1: TClientDataSet;
    dt1ID: TStringField;
    dt1Nombre: TStringField;
    dt1Subclase: TStringField;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    Doc :TghXMLDoc;  // Variable para manejar el documento XML
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Uses
  GHFRTL;

procedure TForm1.FormCreate(Sender: TObject);
begin
  { Abrimos el archivo Objetos.xml que se encuentra en el mismo directorio
    que este programa (la función ghDirPath devuelve una ruta de archivo
    con base en la ruta del programa ejecutable) }
  Doc := TghXMLDoc.Create (ghDirPath ('Objetos.xml'));

  { Mostramos su contenido dentro del cuadro de texto mm1 (el método
    FormatContent devuelve el contenido XML pero con saltos de línea y
    sangrado para mejor legibilidad) }
  mm1.Text := Doc.FormatContent;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Doc.Free;  // Cerramos el documento XML y destruimos el objeto Doc
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
  Atributos, Objetos :OLEVariant;
  I, J :Integer;
  Valor :String;
begin
  { Del archivo XML, obtenemos una lista de todos los elementos de nombre
    "UDSObject" (registros objeto) }
  Objetos := Doc.Nodes ('//UDSObject');

  mm2.Clear;
  mm2.Lines.Add ('Número de objetos: ');
  mm2.Lines.Add (Objetos.Length);
  mm2.Lines.Add ('');
  mm2.Lines.Add ('Identificadores de cada objeto: ');

  // Desplegamos el valor del elemento Handle de cada elemento UDSObject
  For I := 0 To Objetos.Length - 1 Do
    mm2.Lines.Add (Objetos.Item (I).SelectSingleNode ('Handle').Text);

  mm2.SetFocus;
  mm2.SelStart := 0;
  mm2.SelLength := 0;
  dt1.EmptyDataSet;

  // Llenamos un conjunto de datos con los registros XML de objetos
  For I := 0 To Objetos.Length - 1 Do
  Begin
    dt1.Append;

    { Obtenemos la lista de atributos del objeto I (todos los elementos
      "Attribute" hijos del elemento "Attributes" del objeto en turno) }
    Atributos := Objetos.Item (I).SelectNodes ('Attributes/Attribute');

    For J := 0 To Atributos.Length - 1 Do
    Begin
      // Valor del atributo/campo
      Valor := Atributos.Item (J).SelectSingleNode ('AttrValue').Text;

      // Asignación según sea el nombre del atributo
      If Atributos.Item (J).SelectSingleNode ('AttrName').Text =
      'persistent_id' Then
        dt1.FieldByName ('ID').Value := Valor
      Else
        If Atributos.Item (J).SelectSingleNode ('AttrName').Text =
        'name' Then
          dt1.FieldByName ('Nombre').Value := Valor
        Else
          If Atributos.Item (J).SelectSingleNode ('AttrName').Text =
          'resource_subclass' Then
            dt1.FieldByName ('Subclase').Value := Valor;
    End;
  End;

  dt1.First;
end;
Espero te sirva, mi amigo. O ya me dices qué le ajustamos.

Un saludo.
Responder Con Cita
 



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
Consulta rebelde salvica SQL 5 17-07-2008 11:11:55
Yo, soy rebelde porque el mundo me ha hecho así dec La Taberna 21 17-04-2008 12:17:33
StringGrid Rebelde EUFORIA C++ Builder 5 25-02-2008 07:44:09
Componente rebelde ChangoPro OOP 7 23-10-2003 05:52:54


La franja horaria es GMT +2. Ahora son las 21:33:38.


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