Entwickler-Ecke

Dateizugriff - XML - Wieso geht das nicht?


spoof - Mo 11.11.13 12:43
Titel: XML - Wieso geht das nicht?
Morgen, ich hab mich vor kurzem mit dem Speichern und auslesen der Registry und Ini Dateien beschäftigt. Das war soweit kein Problem, allerdings beschäftige ich mich nun mit XML un dort komme ich irgendwie nicht mit klar. Per google finde ich leider nur Tutorials die 10 Jahre alt sind,
http://www.delphi-treff.de/tutorials/datenspeicherung/xml-serialisierung-mit-delphi-net/objekte-serialisieren-und-deserialisieren/
ist das einzigste was mir vermitteln konnte wie XML funktioniert, allerdings habe ich Probleme damit den beispielcode funktionsfähig zu bekommen:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type TMensch = class(TObject)
  public
    Alter: Byte;
    Name: String;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Mensch: TMensch;
Ser: XmlSerializer;
Writer: StreamWriter;
begin
  Mensch := TMensch.Create;
  Mensch.Alter := 15;
  Mensch.Name := 'fido';

  Writer := StreamWriter.Create('Mensch.xml');
  Ser := XmlSerializer.Create(typeof(TMensch));
  Ser.Serialize(Writer, Mensch);
  Writer.Close;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Mensch: TMensch;
Ser: XmlSerializer;
Reader: StreamReader;
begin
  Reader := StreamReader.Create('Mensch.xml');
  Ser := XmlSerializer.Create(typeof(TMensch));
  Mensch := Ser.Deserialize(Reader) as TMensch;
  Reader.Close;

  MessageBox.Show(Mensch.Name + ' ist ' + Mensch.Alter.ToString + ' Jahre alt.');
end;

end.



Mir wird gesagt dass XmlSerializer und StreamReader undeklarierte bezeichner sind. Ich kenne die Variablenarten leider nichtmals, und konnte auch nichts richtiges finden, ich kann mir zwar denken was sie machen, streamreder ist ein stream der den Inhalt der XML ausliest und xmlserializer erkennt das XML Format (denk ich mal).


jaenicke - Mo 11.11.13 12:54

Delphi für .NET ist tot, deshalb kannst du auch mit den entsprechenden Tutorials nichts anfangen. An den Unitnamen sieht man, dass du ein aktuelles Delphi hast, das kann .NET nicht ohne Umwege ansprechen.

Für XML gibt es IXMLDocument aus der Unit Xml.XmlIntf:
http://docwiki.embarcadero.com/Libraries/XE5/de/Xml.XMLIntf


spoof - Mo 11.11.13 13:09

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Delphi für .NET ist tot, deshalb kannst du auch mit den entsprechenden Tutorials nichts anfangen. An den Unitnamen sieht man, dass du ein aktuelles Delphi hast, das kann .NET nicht ohne Umwege ansprechen.

Für XML gibt es IXMLDocument aus der Unit Xml.XmlIntf:
http://docwiki.embarcadero.com/Libraries/XE5/de/Xml.XMLIntf


Ok danke dann werd ich mich mal mit IXMLDocument beschäftigen.


Lemmy - Mo 11.11.13 13:11

und wenn dich serialisieren/deserialisieren interessiert, dafür habe ich für die "alte" RTTI ein Tutorial geschrieben, das noch drauf wartet aktualisiert zu werden. Aber die neue RTTI ist in div. Blogeinträgen (Marco Cantu....) und Büchern schon sehr ausführlich erläutert...

Grüße