Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Seltsames Probelm mit SaveDialog + XML (https://www.delphipraxis.net/44042-seltsames-probelm-mit-savedialog-xml.html)

voodoo 12. Apr 2005 15:01


Seltsames Probelm mit SaveDialog + XML
 
Hallo,
ich habe ein Programm mit XML & SaveDialog. Ich arbeite das erste Mal mit XML in Delphi und habe auch mit Delphi weniger Erfahrung, vielleicht ist es also auch ein ganz einfacher, dummer Fehler von mir.

Ich habe zwei Edit-Felder (2 Strings, dabei soll ein String ein Dateipfad sein), deren Inhalt ich in eine XML-Datei integriere, also etwas wie Hinzufügen. Das geht bei den normalen Eingaben auch ohne Probleme.
Da nun der eine String ein Pfad sein soll, habe ich zusätzlich einen Button erstellt, über den man ein SaveDialog aufrufen kann (Datei wird später eh erst erstellt / überschrieben, daher SaveDialog).

Jedenfalls wird nichts mehr an die XML-Datei angehängt, sobald ich den SaveDialog benutzt habe.
Sobald ich seinen Aufruf wieder auskommentiere, geht wieder alles. Warum?

Hier zwei Code-Auszüge:

Aufruf des Dialogs
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
if SaveDialog1.Execute then
      begin
           //Dateiname
           Edit1.Text := SaveDialog1.FileName;
      end;
ShowMessage(SaveDialog1.FileName); //ist der korrekte Pfad
end;

Speicherung der XML-Daten in Datei
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
   playlist: IXMLNode;
   value  : IXMLElement;
begin
playlist := XMLDoc.createElement('playlist');

value := XMLDoc.createElement('name');
value.text := Edit1.Text;
playlist.appendChild(value);

value := XMLDoc.createElement('path');
value.text := Edit2.Text;
playlist.appendChild(value);

XMLDoc.DocumentElement.appendChild(playlist);


XMLDoc.save('bla.xml');

end;

MathiasSimmack 12. Apr 2005 15:51

Re: Seltsames Probelm mit SaveDialog + XML
 
Zitat:

Zitat von voodoo
Hier zwei Code-Auszüge:

Sind´s denn auch die richtigen? Ich erkenne nichts, das auf ein Problem hindeuten würde. :gruebel:

voodoo 12. Apr 2005 15:58

Re: Seltsames Probelm mit SaveDialog + XML
 
Ja, es sind die richtigen.

Kommentiere ich den SaveDialog-Bereich aus, geht auch wieder alles :?

Phistev 12. Apr 2005 16:09

Re: Seltsames Probelm mit SaveDialog + XML
 
Auf was zeigt denn der Pfad im ersten Edit? Wenn der Pfad auf eine Datei zeigt, deren Referenz in der XML-Datei gespeichert wird, würd ich mal OpenDialog verwenden...

voodoo 12. Apr 2005 20:01

Re: Seltsames Probelm mit SaveDialog + XML
 
Sorry, aber das verstehe ich nicht ganz.

voodoo 12. Apr 2005 21:30

Re: Seltsames Probelm mit SaveDialog + XML
 
Argh, sorry, war ein ganz dummer Fehler von mir. :oops:

Ich hatte ausversehen einen relativen Pfad angegeben bei der XMLDoc.save()-Prozedur. Durch das Auswählen eines Pfades wurde natürlich das Verzeichnis gewechselt und somit wurde die XML-Datei dort abgespeichert, wo ich zuvor eine Datei über den Dialog ausgewählt habe. :wall:

voodoo 20. Apr 2005 21:14

Re: Seltsames Probelm mit SaveDialog + XML
 
Dann nutze ich Thread gerade mal weiter. Ich benutze Delphi 5 & OmniXML.

Ich habe folgendes XML-Grundgerüst:

XML-Code:
<index>
    <playlist>
        <name>foo</name>
        <path>C:\Pfad\bla</path>
    </playlist>
    [...]
</index>
Nun will ich einen Playlistknoten löschen, wenn dieser einen bestimmten Namen hat. Hierfür benutze ich folgenden Code:
Delphi-Quellcode:
procedure TForm1.Lschen1Click(Sender: TObject);
var node: IXMLNode;
begin
if Assigned(Listview1.Selected) then begin
node := xmlDoc.documentelement.selectSingleNode('/index/playlist[name="'+ListView1.selected.Caption+'"]');
xmlDoc.documentElement.removeChild(node);
end;
Allerdings passiert gar nichts. Durch einen Haltepunkt konnte ich herausfinden, dass 'node' immer leer ist. Ich habe schon viel rumexperimentiert, bin allerdings nicht auf die richtige Lösung gekommen.
Wie muss den XPath (?) korrekt heißen, oder warum ist 'node' leer?

Vielen Dank!

marabu 21. Apr 2005 07:20

Re: Seltsames Probelm mit SaveDialog + XML
 
Etwa so sollte es gehen:

Delphi-Quellcode:
procedure TForm1.Lschen1Click(Sender: TObject);
var
  node: IXMLNode;
  xPath, sName: string;
begin
  if Assigned(Listview1.Selected) then begin
    sName := ListView1.selected.Caption;
    sPath := Format('/index/playlist/name[. = "%s"]', [sName]);
    node := xmlDoc.documentelement.selectSingleNode(xPath);
    if Assigned(node) then
      xmlDoc.documentElement.removeChild(node);
  end;
end;
Grüße vom marabu

Robert_G 21. Apr 2005 07:58

Re: Seltsames Probelm mit SaveDialog + XML
 
Warum kapselst du die Playlist nicht einfach in einer Klasse? :gruebel:
Solches direkte XML Gefriemel ist doch ziemlich unschön und fehleranfällig. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 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