XML so richtig ?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

XML so richtig ?

Beitrag von pluto »

Hallo,
seit gestern versuche ich mich mit XML Dateien zu befassen und habe schon kleine erfolge.
ich würde jetzt gerne wissen ob meine Vorgehensweise richtig ist

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, DOM, XMLRead,LCLType;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { private declarations }
  public
    DOC:TXMLDocument;
    { public declarations }
  end; 
 
var
  Form1: TForm1;
 
implementation
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  ReadXMLFile(DOC,'/home/pluto/daten/eigene/lazarus/d2Engine/pacman/test.plf');
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  DOC.Free;
end;
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  node,node1:TDOMNodeList;
  i:Integer;
begin
  if key = VK_F1 then begin
    {node:=DOC.DocumentElement.GetElementsByTagName('PKName');
    if node <> NIl then begin
     for i:=0 to node.Count-1 do begin
        writeln(node.Item[i].Attributes[0].NodeValue);
      end; // for
    end; node <> NIl}
 
    node:=DOC.DocumentElement.GetElementsByTagName('PKName');
    if node <> NIl then begin
      // Autor Name
      writeln(node.item[1].Attributes[0].NodeValue);
      // Level Map
//      writeln(node.Item[1].ChildNodes.Item[0].ChildNodes.count);
      for i:=0 to node.Item[1].ChildNodes.Item[1].ChildNodes.count-1 do
      writeln(node.Item[1].ChildNodes.Item[1].ChildNodes.Item[i].TextContent);
 
 
{      for i:=0 to node.Item[1].ChildNodes.Count-1 do begin
        writeln(node.Item[1].ChildNodes.Item[i].Attributes[0].NodeValue);
      end;}
    end; // node <> NIL
  end; // VK_F1
end;
 
initialization
  {$I Unit1.lrs}
 
end.
Die XMl Datei sieht so aus:




AAAAAAAAAAAAAA
B000000000000A
B000000000000A
BBBBBBBBBBBBBA



CDDDDDDDDDDDDC
C000000000000C
C000000000000C
CDDDDDDDDDDDDC



33333333333333
30000000000003
30000000000003
33333333333333





11111111111111
10000000000001
10000000000001
11111111111111



22222222222222
20000000000002
20000000000002
22222222222222



33333333333333
30000000000003
30000000000003
33333333333333


Ich bin mit dem Item tag noch nicht zufrieden aber sonst werden die Zeilen falsch ausgeben. die Zeilen Brauche ich so wie die da drin stehen und nicht anders das soll z.b. eine Map werden und in ein 2D Array rein(was aber kein Problem da stellt)
MFG
Michael Springwald

Antworten