![]() |
Probleme beim Löschen eines Nodes
Ich komme irgendwie nicht weiter. Ich halte mich an das Tutorial von Chakotay.
Erstmal zum Aufbau der XML-Datei:
XML-Code:
Mein Code zum Löschen sieht so aus:
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <adressdb> - <XMLFile> <MajorVersion>1</MajorVersion> <MinorVersion>0</MinorVersion> <ModifyDate>2004-04-18</ModifyDate> <ModifyTime>23:37:43</ModifyTime> </XMLFile> - <Kontakt> <ID>1</ID> <Name>Edit2</Name> <Vorname>Edit3</Vorname> </Kontakt> - <Kontakt> <ID>2</ID> <Name>name</Name> <Vorname>vorname</Vorname> </Kontakt> - <Kontakt> <ID>3</ID> <Name>Edit2</Name> <Vorname>Edit3</Vorname> </Kontakt> </adressdb>
Delphi-Quellcode:
Beim Ausführen ist Node allerdings nil und bei removeCild bekomme ich eine Exception mit der Meldung "falscher Parameter". Wo steckt da der Fehler?
procedure TContactClass.DelContact(ID: Cardinal);
var Node: IXMLDOMNode; s: String; begin s := '/adressdb/Kontakt[id="'+IntToStr(ID)+'"]'; Node := FXMLDoc.documentElement.selectSingleNode(s); FXMLDoc.documentElement.removeChild(Node); // modify date and time of TXMLFile record EditXMLRecord; FXMLDoc.save(FFilename); end; |
Re: Probleme beim Löschen eines Nodes
Das Problem liegt in der Suchabfrage:
Zitat:
Delphi-Quellcode:
und das ist ja bereits der <adressdb>-Knoten. Entweder machst du also
Node := FXMLDoc.documentElement.selectSingleNode(s);
Delphi-Quellcode:
oder du lässt "/adressdb/" in der XPath-Anfrage weg.
Node := FXMLDoc.selectSingleNode(s);
Und generell solltest du vor jedem Löschen/Bearbeiten/Hinzufügen auch prüfen, dass das Objekt nicht nil ist. Sonst kassiert du immer eine Exception, selbst wenn die Suchanfrage korrekt ist - wäre ja möglich, dass es den gesuchten Knoten nicht gibt. |
Re: Probleme beim Löschen eines Nodes
Quatsch, Kommando zurück: XPath unterscheidet Groß- und Kleinschreibung:
Code:
wirst du in deiner XML-Datei nicht finden.
s := '/adressdb/Kontakt[[color=#ff0000]id[/color]="'+IntToStr(ID)+'"]';
Code:
Wo du die Suchabfrage startest (ob vom XML-Objekt selbst oder vom root-Knoten) ist unwichtig.
<Kontakt>
[color=#ff0000]<ID>1</ID>[/color] <Name>Edit2</Name> <Vorname>Edit3</Vorname> </Kontakt> my fault :oops: |
Re: Probleme beim Löschen eines Nodes
Perfekt. danke. Der Tipp mit dem Prüfen auf Nil ist gut. Kann man auch irgendwie feststellen, ob das Lsöchen geklappt hat?
|
Re: Probleme beim Löschen eines Nodes
Das PSDK meint, der Rückgabewert wäre das entfernte Objekt. (Schaust du mal rein unter "Data Services/MS XML 4 SDK"?). Aber die sicherste Möglichkeit wäre wohl, eine zweite Suchanfrage zu starten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz