Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Werte in einer XML datei überschreiben (https://www.delphipraxis.net/153310-werte-einer-xml-datei-ueberschreiben.html)

t0mmy 28. Jul 2010 17:20

Werte in einer XML datei überschreiben
 
Hallo

Ich bin Anfänger in Sachen Delphi programmierung deshalb hab ich so meine schwierigkeiten.. und zwar ich möchte mit nem Button Werte in einer xml-Datei überschreiben... Jedoch hab ich keinen Plan welche units bzw. wie ich das ganze überhaupst machen soll. also eine einfache schritt für schritt anweisung bzw. ein ganzer Programmcodeauszug würde mir helfen.
Ich weiss nur das man mit XMLDocument1.LoadFromFile('d:\test.xml'); die Datei laden kann. Aber beim Compilieren meldet er mir ein Undeclared Identifier: XMLDocument1

Achja Erklärungskommentare würden mir die Verständlichkeit erleichtern

Danke schon mal im Vorraus.

himitsu 28. Jul 2010 17:38

AW: Werte in einer XML datei überschreiben
 
XMLDocument1 ist eine Variable und diese mußt du natürlich erstmal deklarieren.
Außerdem soll es bestimmt eine Instanz von Delphi-Referenz durchsuchenTXMLDocument oder Delphi-Referenz durchsuchenIXMLDocument sein.

t0mmy 28. Jul 2010 18:51

AW: Werte in einer XML datei überschreiben
 
Danke für deinen Link habs probiert zum Verstehen jedoch ohn jeglichen Erfolg.

bitte um Beispiel.

himitsu 28. Jul 2010 18:59

AW: Werte in einer XML datei überschreiben
 
Schau dir einfach mal im Forum die anderen Beispiele an (Hier im Forum suchenTXMLDocument)
und binde vorher die Unit XMLDoc und eventuell noch die Units XMLDOM und XMLIntf ein.

t0mmy 28. Jul 2010 19:17

AW: Werte in einer XML datei überschreiben
 
Okay ich glaub ich habs.. so wie kann ich jetzt z.B.: einen eintrag in der xml datei überschreiben?
z.B.: Wenn in der xml datei <COMM>blabla</COMM> steht und ich statt blabla... Hello eintragen möchte?



Okay --> app.ChildNodes['COMM'].text:='Hello

t0mmy 29. Jul 2010 09:32

AW: Werte in einer XML datei überschreiben
 
Hallo

Soweit so gut kann ich jetzt mit dem unteren programmcode eine xml-Datei lesen und sie dann als geänderte-Datei abspeichern, aber wie kann ich nun in der xml-datei einen wert ändern? z.B

<family_name>Meyer</family_name> --> <family_name>Schiefer</family_name>

1) das müsste doch mit app.SetAttribute('family_name',' meintext'); aber es funktioniert nicht :(

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  lXML : iXMLDocument;
  app : IXMLNode;
begin
lXML := TXMLDocument.Create(nil);
lxml.LoadFromFile('C:\Users\Tomi\Test1\test.xml');
//HIER GEHÖRT 1) ????
lxml.SaveToFile('C:\Users\Tomi\Test1\test_geändert.xml');
end;

mkinzler 29. Jul 2010 09:42

AW: Werte in einer XML datei überschreiben
 
http://www.delphi-treff.de/tutorials...y/einfuehrung/

t0mmy 29. Jul 2010 10:09

AW: Werte in einer XML datei überschreiben
 
Danke für den Link aber der bringt mich nicht weiter, hab da aus einem anderen thread (http://www.delphipraxis.net/141106-x...-einlesen.html) mehr informationen rauslesen können... aber dazu fehlt mir jegliches Verständnis. Ich möcht nochmal erwähnen das ich ein Anfänger bin.



Hab da jetzt 3 Befehle, aber bei allen drei bekomm ich einen Laufzeitfehler..
Delphi-Quellcode:
//app.ChildNodes['family_name'].text:='Schiefer';
//app.SetAttribute('family_name','Schiefer');
//app.ChildValues['family_name']:='Schiefer';

mkinzler 29. Jul 2010 10:25

AW: Werte in einer XML datei überschreiben
 
Was für ein Fehler?
Zitat:

Ich möcht nochmal erwähnen das ich ein Anfänger bin.
Kann man ändern.

BTW: Verwende bitte Code-Tags (in deinem Fall den Delphi-Tag)

t0mmy 29. Jul 2010 10:57

AW: Werte in einer XML datei überschreiben
 
Man möge den Kommentar beachten.
Was mach ich falsch??

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  lXML : iXMLDocument;
  app : IXMLNode;
begin
lXML := TXMLDocument.Create(nil);
lxml.LoadFromFile('C:\Users\Tomi\Test1\test.xml');
//lxml.Active := True;
app.ChildNodes['family_name'].text:='Schiefer'; // Hier die Fehlermeldung bzw. die Zugriffsverletzung
lxml.SaveToFile('C:\Users\Tomi\Test1\test_geändert.xml');
end;
end.

Hier die XML-Datei:
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<test>
   <applicant_1>
      <family_name>Meyer</family_name>
      <given_name>Harald</given_name>
      <testdate>13.03.2009</testdate>
      <language>english</language>
      <WR_RW>229</WR_RW>
   </applicant_1>
</test>
Also warum app.ChildNodes könnte mir klar sein, weil ich nämlich nicht den ganzen XML-Code einlese aber warum funktioniert nicht app.ChildValues['family_name']:='Schiefer'; oder app.SetAttribute('family_name','Schiefer'); ??

himitsu 29. Jul 2010 11:39

AW: Werte in einer XML datei überschreiben
 
Wo hast du app einen Node aus der XML zugewiesen?

Bei dir ist app "leer" (bei Interfaces ist es glücklicher Weile mit nil initialisiert) und dadurch entsteht natürlich die Zugriffsverletzung.
PS: sollte da nicht eigentlich Delphi irgendwas von "nicht initialisierter Variable" faseln? also in den Compilerwarnungen.


PSS: Zugriffsverletzungen auf Adresse $000000xx sollte dich immer stuzig machen und du solltest dich da mal nach einem NIL (als Inhalt) umsehen.

t0mmy 29. Jul 2010 12:13

AW: Werte in einer XML datei überschreiben
 
Nein, also der Compiler meldet nichts

ChrisE 29. Jul 2010 13:03

AW: Werte in einer XML datei überschreiben
 
Hallo t0mmy,

ist zwar nicht all zu elegant, aber das könnte dir weiter helfen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  lXML : iXMLDocument;
  app : IXMLNode;
begin
  lXML := TXMLDocument.Create(nil);
  lxml.LoadFromFile('C:\Users\Tomi\Test1\test.xml');
  // als erstes den Knoten 'test' finden
  app := lxml.ChildNodes.FindNode('test');
  // jetzt den knoten 'applicant_1' finden
  if app <> nil then
  begin
    app := app.ChildNodes.FindNode('applicant_1');
  end;
  // jetzt den Knoten 'family_name' finden
  if app <> nil then
  begin
    app := app.ChildNodes.FindNode('family_name');
  end;

  // prüfen, ob wir den Knoten gefunden haben -> wenn <> nil
  if app <> nil then
  begin
    app.text:='Schiefer'; // Hier die Fehlermeldung bzw. die Zugriffsverletzung
    lXML.SaveToFile('testXML.xml');
    ShowMessage('OK');
  end else
  begin
    ShowMessage('Node not found');
  end;
end;
Gruß, Chris

t0mmy 29. Jul 2010 14:03

AW: Werte in einer XML datei überschreiben
 
Danke vielmals... :-D
Ich hab gedacht man muss nicht den knoten suchen sonder ein Befehl findet den Knoten von selber und ändert den Inhalt...

Sehr gut Kommentiert :)

himitsu 29. Jul 2010 14:08

AW: Werte in einer XML datei überschreiben
 
Soeinen Eierlegenwollmilschsaubefehl gibt es (also fast)

Diese Angelegenheut nennt sich XPath > Hier im Forum suchenXPath MSDN-Library durchsuchenXPath oder XPath

t0mmy 29. Jul 2010 16:53

AW: Werte in einer XML datei überschreiben
 
Da hab ich noch ne kleine frage...

wie kann ich aber beim knote Order eine variable ändern

also zum Beispiel hier:

<Order No="2058003995" DispDate="22.07.2010" Basket="3995">

möchte ich No ändern.


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