Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi XML Probleme Datei erstellen (https://www.delphipraxis.net/3846-xml-probleme-datei-erstellen.html)

MoreThanWords 2. Apr 2003 10:29


XML Probleme Datei erstellen
 
Hallo

Sorry, dass ich schon wieder mit diesem Thema komme aber irgendwie schaffe ich es nicht eine XML Datei zu erstellen.

Code:
procedure TForm2.Button3Click(Sender: TObject);
var Sub,
    Node : IXMLDOMNode;
    DomDoc: TDOMDocument;
begin
   DomDoc:= TDOMDocument.Create(self);
   sub:= DOMDocument1.createElement('MeinNode');
   sub.Text:= 'Hallo Welt';

   node:= DomDoc.documentElement; //DomDoc.documentElement ist nil???
   node.appendChild(sub); //hier bekomme ich Zugriffsverletzung
   ShowMessage(DOMDoc.documentElement.xml);

   //...Speichern mit DomDoc.Save.....
end;
Diesen Code hab ich aus einem Beitrag aus diesem Forum aber bei mir scheint er nicht richtig zu funktionieren. An den Versionen von MSXML kann es nicht liegen ich hab (2,3,4) bereits ausprobiert.

Kann mir jemand helfen.

Danke

svehei 2. Apr 2003 11:04

ich lese folgendermassen aus einer xml-datei

Delphi-Quellcode:
procedure XXX.LoadFromHRXMLFile(FileName: String; AOwner: TComponent);
var
  FXMLDocument     : TXMLDocument;
  lNode            : IXMLNode;
  lNodeList        : IXMLNodeList;
  i : integer;
begin
  FXMLDocument := TXMLDocument.Create(AOwner);
  FXMLDocument.LoadFromFile(FileName);
  FXMLDocument.Active := True;
  //Root Element setzen
  lNode    := FXMLDocument.DocumentElement;
  lNodeList := lNode.ChildNodes;
  //alle Nodes durchgehen
  for i := 0 to lNodeList.Count -1 do
  begin
    showmessage(lNodeList.Nodes[i].NodeName+'='+lNodeList.Nodes[i].text);
  end;
und das funzt wunderbar ;-)

da es sich um xml-dateien handelt, ist das speichern ist im prinzip ganz easy. du kannst das wie bei normalen textfiles machen

Delphi-Quellcode:
  AssignFile(f, FileName);
{$I-}
  rewrite(f);
{$I+}
  if IOResult = 0 then
  begin
    writeln(f, '<?xml version="1.0" encoding="UTF-8"?>');
    writeln(f, '<ROOTTAG>');
    writeln(f, '<SUBTAG>'+FValue+'</SUBTAG>');

...
die einzelnen tags kannst du natuerlich baummaessig aus deinem zuvor gelesenen IXMLNode ermitteln und schreiben

ich hoffe das hilft dir weiter

MoreThanWords 2. Apr 2003 11:21

Vielen Dank erstmal für die fixe Antwort

Leider funktioniert das ganze bei mir nicht, da ich diese ganzen Typen (TXMLDocument...) nicht habe kann es sein, dass diese ertst bei Delphi 6 enthalten sind? Ich hab leider Delphi 5 :cry: und mir deswegen die Typbibliothek von Microsoft (MSXML4) importiert.

Ich wollte auch eine ganz neue Datei schreiben also soll bei mir kein LoadFromFile() stattfinden.

Grüße

MathiasSimmack 3. Apr 2003 17:30

Zitat:

Zitat von MoreThanWords
Sorry, dass ich schon wieder mit diesem Thema komme aber irgendwie schaffe ich es nicht eine XML Datei zu erstellen.

Warum Sorry? Wenn etwas unklar ist, dann sollte schon gefragt werden.

Zitat:

Diesen Code hab ich aus einem Beitrag aus diesem Forum aber bei mir scheint er nicht richtig zu funktionieren.
Wieder mal eine kleine Kritik am Rande: hilfreicher als obiger Satz wäre gewesen, wenn du sagst, aus welchem Beitrag der Code stammt. Wenn nämlich wirklich was falsch ist, dann sollten solche Fehler auch behoben werden, damit nicht ein anderer den selben Quark benutzt. Aber evtl. funktioniert der hier im Forum gepostete Code ja auch, und du hast ihn nur falsch übernommen?

Zitat:

An den Versionen von MSXML kann es nicht liegen ich hab (2,3,4) bereits ausprobiert.
Ich habe nun zwar alle Typbibliotheken von MS XML 2 bis 4 hier liegen, aber bevorzugt arbeite ich mit MS-XML 3. Und da habe ich bereits den ersten Fehler in deinem Code gefunden, denn in dieser Typbibliothek gibt es kein TDOMDocument. MS-XML 4 kennt den aber auch nicht.

Zitat:

kann es sein, dass diese ertst bei Delphi 6 enthalten sind?
Ja.

Zitat:

Ich hab leider Delphi 5 :cry: und mir deswegen die Typbibliothek von Microsoft (MSXML4) importiert.
Offensichtlich nicht richtig, denn mein Ansatz sähe so aus. Und er funktioniert:
Delphi-Quellcode:
var
  Sub   : IXMLDOMNode;
  DomDoc : DOMDocument;
begin
  domdoc := CoDOMDocument.Create;

  if(domdoc <> nil) then try
    sub     := domdoc.createElement('MeinNode');
    sub.text := 'Hallo Welt';

    domdoc.appendChild(sub);
    ShowMessage(domdoc.xml);

    domdoc.save(ExtractFilePath(paramstr(0)) + 'test.xml');
  finally
    domdoc := nil;
  end;
end;
Gruß.

MoreThanWords 4. Apr 2003 07:49

Hey Danke,

hat funktioniert.

Zitat:

Und da habe ich bereits den ersten Fehler in deinem Code gefunden, denn in dieser Typbibliothek gibt es kein TDOMDocument.
Bei dem Beispiel, dass ich hier gefunden habe war leider keine Deklaration der Variablen deswegen habe ich der Klasse auch ein "T" vorangesetzt wie bei fast allen Klassen.
Somit hatte ich eine Variable von Typ TDOMDocument statt DOMDocument.

Komisch dass sich Delphi nicht beschwert hat.

Bis dann..


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