Probleme mit XML

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
tuetenelch
Beiträge: 14
Registriert: Do 13. Mär 2008, 11:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Probleme mit XML

Beitrag von tuetenelch »

Hallo zusammen,
ich arbeite mich gerade mit der Unit "Dom" in Xml ein.
Ich bekomme leider immer ein "Access violated" wenn ich "ChildNodes.count" benutze.
Beispielsweise hier:

Code: Alles auswählen

for i := 0 to (temp.ChildNodes.count-1) do
 begin  
[...}
end;
Woran liegt das? Leider konnte ich im Netz auch nicht wirklich etwas finden.
Hoffe mir kann jemand helfen, das bringt mich ziemlich zur Verzweiflung :(

Vielen Dank schonmal!
Tuetenelch

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6767
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Probleme mit XML

Beitrag von af0815 »

ChildNodes existieren zu dem Zeitpunkt ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

tuetenelch
Beiträge: 14
Registriert: Do 13. Mär 2008, 11:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Probleme mit XML

Beitrag von tuetenelch »

Müssten... oder eben auch nicht. Ich hab nicht so recht Ahnung.
Vorher geschieht eigentlich nur

Code: Alles auswählen

temp := Doc.DocumentElement.FindNode('OBJECT');
Und ich bin davon ausgegangen, daß bei einer Zuweisung einer Variable (eines Objektes?) vom Typ TDomNode automatisch die Sachen initialisiert werden. Irre ich?

Benutzeravatar
theo
Beiträge: 10867
Registriert: Mo 11. Sep 2006, 19:01

Re: Probleme mit XML

Beitrag von theo »

Nach nil checken hat noch nie geschadet, offenbar wird der Node nicht gefunden:

if temp <> nil then
oder
if assigned(temp) then

tuetenelch
Beiträge: 14
Registriert: Do 13. Mär 2008, 11:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Probleme mit XML

Beitrag von tuetenelch »

theo hat geschrieben:Nach nil checken hat noch nie geschadet, offenbar wird der Node nicht gefunden:

if temp <> nil then
oder
if assigned(temp) then
Uff. Jetzt klappts. Das heißt aber ich habe imme rnoch nicht verstanden wie diese XML-Dokumente geparst werden. Werde ich wohl ein wenig weiter probieren müssen.
Hab dank :)

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Probleme mit XML

Beitrag von Hitman »

.ChildNodes niemals so verwenden wie in dem Code Ausschnitt!
ChildNodes ruft intern jedes mal GetChildNodes auf, was eine neue TDomNodeList zurückgibt. Also machs lieber so:

Code: Alles auswählen

var
  nodeList: TDOMNodeList
begin
  ...
  nodeList := temp.GetNodeList;
  for i := 0 to nodeList.Count - 1 do
    ...
  nodeList.Free;
  ...
end;
Ansonsten wirst du jede menge Memory Leaks haben ;)

tuetenelch
Beiträge: 14
Registriert: Do 13. Mär 2008, 11:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Probleme mit XML

Beitrag von tuetenelch »

Hitman hat geschrieben:.ChildNodes niemals so verwenden wie in dem Code Ausschnitt!
Ansonsten wirst du jede menge Memory Leaks haben ;)
Ah, jetzt ist es klar :)
Hab vielen herzlichen Dank!

Antworten