Ich möchte aus der in Lazarus befindlichen Datei packagesfiles.xml die Version eines Packages auslesen. Dazu habe ich hier schon einige Beiträge gefunden und gelesen (auch die Demos die bei Lazarus dabei sind). Es funktioniert sogar, aber ich glaube ich habe ein Monster erschaffen . Irgendwie muss das einfacher gehen. In einen anderen Beitrag schrieb wp_xyz das man das Rekursiv angehen muss, leider habe ich keine Ahnung wie das aussehen könnte.
Kann mir jemand auf die Sprünge helfen?
Viele Grüße
Bernd
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Laz2_DOM,
Laz_XMLRead;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
function GetVersion : string;
var
Document : TXMLDocument;
i, j,k,l,m: Integer;
s : string;
begin
ReadXMLFile(Document,'packagefiles.xml');
s:='';
for i := 0 to (Document.DocumentElement.ChildNodes.Count - 1) do
begin
for j := 0 to (Document.DocumentElement.ChildNodes.Item[i].ChildNodes.Count - 1) do
for k := 0 to (Document.DocumentElement.ChildNodes.Item[i].ChildNodes.Item[j].ChildNodes.Count - 1) do
if Document.DocumentElement.ChildNodes.Item[i].ChildNodes.Item[j].ChildNodes.Item[k].Attributes[0].NodeValue = 'Multis'
then begin
for l := 0 to (Document.DocumentElement.ChildNodes.Item[i].ChildNodes.Item[j].ChildNodes.Count - 1) do
if Document.DocumentElement.ChildNodes.Item[i].ChildNodes.Item[j].ChildNodes.Item[l].NodeName = 'Version' then
begin
for m := 0 to Document.DocumentElement.ChildNodes.Item[i].ChildNodes.Item[j].ChildNodes.Item[l].Attributes.Length -1 do
begin
s:=s+Document.DocumentElement.ChildNodes.Item[i].ChildNodes.Item[j].ChildNodes.Item[l].Attributes[m].NodeValue;
Result:= s;
end;//Attributes
end;//Version
end;//if Multis
end;//i
Document.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:= 'Version: '+GetVersion;
end;
end.