Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Record zu XML File wandeln
Christi - Mo 21.07.08 17:33
Titel: Record zu XML File wandeln
Hallo DF,
ich möchte einen Record der stark verschachtelt ist und auf jeder Ebene sehr unterhiedliche variablen Typen hat in ein XML dokument überführen.
Damit ich nicht für jede in Klartext benannte Variable mit 4 zeilen Code als Node dem XML dokument inzugefügt werden muss möchte ich die struktur durchsuchen.
hat jeman einen Ansatz wie man das machen kann.
Kann auch eine Komponenten lösung sein. im moment bin ich für jede Idee dankbar.
mfg
Christi
Hidden - Mo 21.07.08 17:53
Hi und :welcome: im Delphi-Forum,
Ich bin kein Experte aber ist eine File of TMyRecord nicht einfacher? :)
mfG,
Yogu - Mo 21.07.08 20:06
Hidden hat folgendes geschrieben: |
| Ich bin kein Experte aber ist eine File of TMyRecord nicht einfacher? |
Wenn er noch mehr speichern möchte, dann nicht.
Also...
Ein Record ist als ein Block im Speicher verfügbar. Das heißt, auch direkt untergeordnete Records sind in dieser Reihenfolge zu finden. Das ganze wird jedoch scheitern, wenn du nur Pointer auf die Unterobjekte in den Records gespeichert hast.
Das mal vorneweg. Jetzt zur Umsetzung:
Du gehst ganz einfach den Speicher vom Start des Recors
Länge Byte durch, wandelst sie in eine hexadezimale Zeichenfolge um und speicherst diese in der XML-Datei.
Ein bisschen Code...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function BinaryToHexStr(Data: Pointer; Size: Integer) String;; var i: Integer; Start: Integer; P: PByte; B: Byte; begin Result := '';
Start := Integer(Data);
for i := 0 to Size-1 do begin P := PByte(Start + i);
B := P^;
Result := Result + IntToHex(B, 2); end; end; |
Vielleicht könnte man noch etwas optimieren, da kenne ich mich nicht so aus :)
Grüße,
Yogu
Christi - Di 22.07.08 08:55
Das ist ja klasse,
Danke für die Antworten.
Bestimmt hätte ich es genauer beschreiben sollen.
Natürlich hat der Record auch ein paar Variablen und Arrays mit Strings und Stringlist, also Variablen die nur als "Pointer" hinterlegt sind. Alles andere wäre auch nicht praktikabel.
Eine eigene Speicher verwaltungskalsse zu erzeugen hatte ich auch schon gedacht.
Den Aufwand diese Struktur dann zu erstellen würde aber IMHO den gleichen Aufwand im Programm erzeugen, wie es fest zu codieren.
Alternativ habe ich überlegt einen Parser zu schreiben, der die verschachtelte Record Struktur einfach aus dem pas file rekonstruiert, darauf aufbauend die struktur durchsuchen könnte.
Allerdings habe ich da noch Zweifel, ob das so einfach geht wie ich mir das überlegt habe.
Ach ja natürlich sind die Strings zum groessten Teil alle für TNT Controls und benutzen UTF8.
Gruss
Christi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!