Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi XML-Datei manipulieren (https://www.delphipraxis.net/197520-xml-datei-manipulieren.html)

Pader1305 13. Aug 2018 12:22

Delphi-Version: 10.1 Berlin

XML-Datei manipulieren
 
Hallo Zusammen,

ich bin gerade in meiner Ausbildung dabei mich mit Delphi vertraut zu machen und so möchte ich gerne eine XML-Datei auslesen und den Node
"alias" überschreiben. Allerdings überschreibt er diesen Wert einfach nicht.
Mag mir jemand hier auf die Sprünge helfen? Ich bin wie gesagt noch ein Delphi-Anfänger.
Über jede Hilfe wäre ich sehr dankbar! :)

Delphi Quellcode
Delphi-Quellcode:
procedure TForm1.Button_ReadClick(Sender: TObject);
var
  nodeLcsdb : IXMLNode;

XMLDocument1 : iXMLDocument;

app : iXMLNode;

begin
  Memo1.Clear;

  XMLDocument1 := TXMLDocument.Create(nil);
  XMLDocument1.LoadFromFile('C:\Users\kuipers.patrick\Desktop\XML\test.xml');

  app := XMLDocument1.ChildNodes.FindNode('lcsdb').ChildNodes.FindNode('db').ChildNodes.FindNode('alias');

    XMLDocument1.LoadFromFile('C:\Users\kuipers.patrick\Desktop\XML\test.xml');
    nodeLcsdb := XMLDocument1.ChildNodes.FindNode('lcsdb');


  if app <> nil then
  begin
    app.Text := 'Erfolgreich';
    showMessage(app.Text);
    XMLDocument1.SaveToFile('test.xml');
    Memo1.Lines.Add(nodeLcsdb.ChildNodes.FindNode('db').ChildValues['alias']);
    Memo1.Lines.Add(nodeLcsdb.ChildNodes.FindNode('db').ChildValues['databasename']);

  end else
  begin
    showMessage('Node not found');
  end;
Mit Memo1 wollte ich mir den Wert des "Alias" anschauen, um zu sehen, ob es überschrieben wurde, was aber nicht der Fall ist.
Den hier gezeigten Code hab von diesem Forumbeitrag https://www.delphipraxis.net/153310-...schreiben.html und an einigen Stellen ein wenig rumexperimentiert.


Code:
<?xml version="1.0" encoding="windows-1252"?>
<lcsdb>
   <db>
      <alias>Test</alias>
      <databasename>TestObjekt1</databasename>
   </db>
</lcsdb>

Jasocul 13. Aug 2018 13:05

AW: XML-Datei manipulieren
 
Ich habe gerade kein Delphi zur Hand. Daher also nur das für mich offensichtliche:

1. Du lädst die XML-Datei
2. Du suchst dir den Knoten
3. Du lädst die XML-Datei und meinst, die Adresse für den Knoten hat sich nicht geändert.

Ich habe mal die Zeilen auskommentiert, die hier stören.

Delphi-Quellcode:
procedure TForm1.Button_ReadClick(Sender: TObject);
var
  nodeLcsdb : IXMLNode;
  XMLDocument1 : iXMLDocument;
  app : iXMLNode;

begin
   Memo1.Clear;

   XMLDocument1 := TXMLDocument.Create(nil);
   XMLDocument1.LoadFromFile('C:\Users\kuipers.patrick\Desktop\XML\test.xml');

   app := XMLDocument1.ChildNodes.FindNode('lcsdb').ChildNodes.FindNode('db').ChildNodes.FindNode('alias');

//   XMLDocument1.LoadFromFile('C:\Users\kuipers.patrick\Desktop\XML\test.xml');
   nodeLcsdb := XMLDocument1.ChildNodes.FindNode('lcsdb');


   if app <> nil then
   begin
     app.Text := 'Erfolgreich';
     showMessage(app.Text);
     XMLDocument1.SaveToFile('test.xml');
     Memo1.Lines.Add(nodeLcsdb.ChildNodes.FindNode('db').ChildValues['alias']);
     Memo1.Lines.Add(nodeLcsdb.ChildNodes.FindNode('db').ChildValues['databasename']);

   end else
   begin
     showMessage('Node not found');
   end;

Pader1305 13. Aug 2018 13:37

AW: XML-Datei manipulieren
 
Vielen Dank für deine Antwort!
Ja, jetzt sehe ich es auch, was ein blöder Fehler. Deine Lösung hat den Fehler auch behoben!:-D


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