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
Doc :TghXMLDoc; public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Uses
GHFRTL;
procedure TForm1.FormCreate(Sender: TObject);
begin
Doc := TghXMLDoc.Create (ghDirPath ('Objetos.xml'));
mm1.Text := Doc.FormatContent;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Doc.Free; end;
procedure TForm1.Button1Click(Sender: TObject);
Var
Atributos, Objetos :OLEVariant;
I, J :Integer;
Valor :String;
begin
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: ');
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;
For I := 0 To Objetos.Length - 1 Do
Begin
dt1.Append;
Atributos := Objetos.Item (I).SelectNodes ('Attributes/Attribute');
For J := 0 To Atributos.Length - 1 Do
Begin
Valor := Atributos.Item (J).SelectSingleNode ('AttrValue').Text;
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.