AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Probleme beim Löschen eines Nodes
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim Löschen eines Nodes

Ein Thema von Luckie · begonnen am 18. Apr 2004 · letzter Beitrag vom 18. Apr 2004
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Probleme beim Löschen eines Nodes

  Alt 18. Apr 2004, 22:43
Ich komme irgendwie nicht weiter. Ich halte mich an das Tutorial von Chakotay.
Erstmal zum Aufbau der XML-Datei:
XML-Code:
  <?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>
Mein Code zum Löschen sieht so aus:
Delphi-Quellcode:
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;
Beim Ausführen ist Node allerdings nil und bei removeCild bekomme ich eine Exception mit der Meldung "falscher Parameter". Wo steckt da der Fehler?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: Probleme beim Löschen eines Nodes

  Alt 18. Apr 2004, 22:57
Das Problem liegt in der Suchabfrage:
Zitat:
s := '/adressdb/Kontakt[id="'+IntToStr(ID)+'"]';
Du suchst nach einem Knoten <kontakt>, der eine bestimmte ID hat, und der sich in einem Knoten <adressdb> befindet. Allerdings suchst du vom root-Knoten aus:
Node := FXMLDoc.documentElement.selectSingleNode(s); und das ist ja bereits der <adressdb>-Knoten. Entweder machst du also
Node := FXMLDoc.selectSingleNode(s); oder du lässt "/adressdb/" in der XPath-Anfrage weg.

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.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: Probleme beim Löschen eines Nodes

  Alt 18. Apr 2004, 23:05
Quatsch, Kommando zurück: XPath unterscheidet Groß- und Kleinschreibung:
Code:
s := '/adressdb/Kontakt[[color=#ff0000]id[/color]="'+IntToStr(ID)+'"]';
wirst du in deiner XML-Datei nicht finden.
Code:
<Kontakt>
  [color=#ff0000]<ID>1</ID>[/color]
  <Name>Edit2</Name>
  <Vorname>Edit3</Vorname>
</Kontakt>
Wo du die Suchabfrage startest (ob vom XML-Objekt selbst oder vom root-Knoten) ist unwichtig.
my fault
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Probleme beim Löschen eines Nodes

  Alt 18. Apr 2004, 23:20
Perfekt. danke. Der Tipp mit dem Prüfen auf Nil ist gut. Kann man auch irgendwie feststellen, ob das Lsöchen geklappt hat?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: Probleme beim Löschen eines Nodes

  Alt 18. Apr 2004, 23:31
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz