![]() |
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; |
Re: Seltsames Probelm mit SaveDialog + XML
Zitat:
|
Re: Seltsames Probelm mit SaveDialog + XML
Ja, es sind die richtigen.
Kommentiere ich den SaveDialog-Bereich aus, geht auch wieder alles :? |
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...
|
Re: Seltsames Probelm mit SaveDialog + XML
Sorry, aber das verstehe ich nicht ganz.
|
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: |
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:
Nun will ich einen Playlistknoten löschen, wenn dieser einen bestimmten Namen hat. Hierfür benutze ich folgenden Code:
<index>
<playlist> <name>foo</name> <path>C:\Pfad\bla</path> </playlist> [...] </index>
Delphi-Quellcode:
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.
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; Wie muss den XPath (?) korrekt heißen, oder warum ist 'node' leer? Vielen Dank! |
Re: Seltsames Probelm mit SaveDialog + XML
Etwa so sollte es gehen:
Delphi-Quellcode:
Grüße vom marabu
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; |
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 10:33 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