Hallo Delphianer,
Ich baue eine Dateiliste im
XML-Format. Aussehen soll das ganze in etwa so:
XML-Code:
<root>
<files>
<file>
<name>app.exe</name>
<version>1.0.0.1</version>
</file>
<file>
<name>lib.dll</name>
<version>1.0.0.1</version>
</file>
</file>
</root>
Ich lade die
XML-Datei in mein TXMLDocument und möchte neue Dateien hinzufügen:
Delphi-Quellcode:
var
FXMLDoc : TXMLDocument;
FilesNode, FileNode , Node: IXMLNode;
begin
...
FXMLDoc := TXMLDocument.Create(Application);
FXMLDoc.Options := FXMLDoc.Options + [doNodeAutoIndent];
FXMLDoc.LoadFromFile(AXmlLFile);
FXMLDoc.Active := true;
...
FilesNode := FXMLDoc.ChildNodes.FindNode('files');
FileNode := FilesNode.AddChild('file');
Node := FileNode.AddChild('name');
Node.Text := ExtractFileName (AFileName);
Node := FileNode.AddChild('Version');
Node.Text := AVersion;
// spaßeshalber anzeigen
showMessage (FilesNode.XML);
Schau ich mir den <files>-Knoten an sind alle <file>-Knoten schön eingerückt, nur der neue Knoten nicht, was mich aber nicht weiter stört.
Nun möchte ich alle Dateien zeigen. Also:
Delphi-Quellcode:
FilesNode := FXMLDoc .ChildNodes.FindNode('files');
if Assigned(FilesNode) then
begin
FileNode := FilesNode.ChildNodes.First;
while assigned(FileNode) do
begin
// spaßeshalber anzeigen
showMessage (FileNode.XML);
LI := Listview1.items.add();
LI.Caption := FileNode.ChildNodes.FindNode('name').text;
Li.SubItems.Add(FileNode.ChildNodes.FindNode('version').text);
FileNode := FileNode.NextSibling;
end;
end;
Hier werden mir alle Dateien, sprich <file>-Knoten angezeigt, nur der neu Hinzugefügte nicht.
Die ShowMessage-Box zeigt bei alle Knoten, die bereits in der
XML-Datei vorhanden sind den korrekten
XML-Code an. Nur bei dem neu Hinzugefügten bleibt sie leer. Genauer, es sind nur ein paar Leerzeichen drin.
Speichere ich das XMLDoc und lade es erneut, ist auch der neu hinzugefügte Knoten da, korrekt eingerückt und läßt sich mit meiner While-Schleife anzeigen.
Muß man
XML-Datei erst speichern damit sie korrekt funktionieren? Was wäre mir neu.
Oder mache ich was falsch?
Danke für die Hilfe
gmc