XML - zapis i odczyt

0

Witam, zapisuje dane do pliku xml w taki sposób:

var
   myXML : TXMLDocument;
   childNode : IXMLNode;
 begin
   myXML := TXMLDocument.Create(nil);
   try

     myXML.Active := true;
     myXML.AddChild('test');

     childNode := myXML.DocumentElement.AddChild('Name');
     childNode.Text:='text';

     myXML.XML.Text := xmlDoc.FormatXMLData(myXML.XML.Text);

     myXML.Active := true;
     myXML.SaveToFile('C:\test.xml');

   finally
     myXML := nil;
   end;
 end;
Odczytuje w taki:
begin
 XMLDocument.LoadFromFile('C:\test.xml');
 XMLDocument.Active := True;
 Edit1.Text := XMLDocument.DocumentElement.ChildNodes['Name'].NodeValue;
end;

Jak zrobić odczyt bez użycia komponentu: XMLDocument

Prosiłbym o pomoc :)

0

Można użyć zewnętrznego parsera XML, ja używałem tego z:
http://spook.freshsite.pl/download.php bo posiadam Delphi,
w wersji 7 - Personal. A w ogołe bez użycia modułów oraz w
całości przez kod to nie bardzo wiem jak, dużo "rzeźbienia".

0

Witam Olesio :)

bardziej chodziło mi o takie rozwiązanie bym nie musiał kłaść na formę komponentu lecz utworzyć go dynamicznie, próbowałem w taki sposób lecz to mi nie działa
sygnalizując błędem AV.

var
 ChildNodes : IXMLNode;
 XmlDoc  : TXMLDocument;

 begin
 XmlDoc := TXMLDocument.Create(nil);
  try
   XmlDoc.LoadFromFile('C:\test.xml');
   XmlDoc.Active := True;
   Edit1.Text := XmlDoc.DocumentElement.ChildNodes['Name'].NodeValue;

 finally
  XmlDoc := nil;
 end;

może źle coś robię ??

1

XmlDoc := TXMLDocument.Create(Application);

0

Misiekd - Dziękuję serdecznie, działa :-)

0

u mnie nie działą przy kompilacji wyrzuca błąd w tym miejscu

xmlDoc.FormatXMLData(myXML.XML.Text);

undeclared identifier xmlDoc

czy ktos może podpowiedziec gdzie jest blad?

dodanie znacznika <code class="delphi"> - @furious programming

0

a tą linijkę XmlDoc : TXMLDocument; posiadasz??

0

dzieki za odpowedź, tak posiadam, ale wówczas nadal jest inny komunikat undeclared identifier FormatXMLData

tylko z tą linijką mam problem, może coś we właściwościach jakiegoś komponentu trzeba dopisać?
kod wygląda tak jak nizej.

procedure TForm2.Button1Click(Sender: TObject);
 var
   myXML : TXMLDocument;
   childNode : IXMLNode;
   XmlDoc  : TXMLDocument;
 begin
   myXML := TXMLDocument.Create(application);
   try
     myXML.Active := true;
     myXML.AddChild('test');

     childNode := myXML.DocumentElement.AddChild('Name');
     childNode.Text:='text';
     myXML.XML.Text := XmlDoc.FormatXMLData(myXML.XML.Text);
     myXML.Active := true;
     myXML.SaveToFile('test.xml');

   finally
     myXML := nil;
   end;
end;

dodanie znacznika <code class="delphi"> - @furious programming

1

FormatXMLData to funkcja z modułu XMLDoc (w nowych Delphi Xml.XMLDoc) a nie metoda komponentu i użyte w kodzie z pierwszego posta XmlDoc nie jest żadnym TXMLDocument tylko nazwą modułu z którego wywoływana jest funkcja.

0
   finally
     myXML := nil;
   end;
end;

@mały Orzeł - jesteś pewien, że w ten sposób zwalnia się pamięć po nieużywanych już obiektach?

1 użytkowników online, w tym zalogowanych: 0, gości: 1