Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 12, 2025 12:58

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Jan 26, 2010 23:15 
Offline
DGL Member

Registriert: Mo Aug 31, 2009 13:19
Beiträge: 151
Hallo Leute,

wie an der Frequenz meiner Forenbeiträge erkennbar ist gehts im Moment bei mir schleppend - aber stetig voran. Ich hab vor einiger Zeit schon die Basis für ettliche Komponenten geschrieben, die sich selbst in .ini-Dateien schreiben. Das geht mit den Bordmitteln, die Delphi für Ini-Dateien mitliefert ja auch sehr gut. Mittlerweile hat sich bei mir das Problem aufgetan, dass die Verwaltung der Komponenten auf mehreren Ebenen stattfindet - und das spricht gegen die "eindimensionalen" .ini-Dateien und hat bei mir den Ausschlag gegeben, auf .xml umzusatteln.
Ich kann auch schon "handgeschriebene" .xml's auslesen. Meine Beispiel-xml gibts hier:

Code:
  1.  
  2. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  3. <Controls>
  4.     <GUITest ClassName="TglGUIManager">
  5.         <Children>
  6.             <TglControl0 ClassName="TglControl">
  7.                 <Settings Bottom="0" Left="0" Height="0" Width="0" Texture="" Red="0" Green="0" Blue="0" Alpha="0" Visible="0"/>
  8.                 <Children>
  9.                 </Children>
  10.             </TglControl0>
  11.             <TglControl1 ClassName="TglControl">
  12.                 <Settings Bottom="0" Left="0" Height="0" Width="0" Texture="" Red="0" Green="0,25" Blue="0" Alpha="0" Visible="0"/>
  13.                 <Children>
  14.                 </Children>
  15.             </TglControl1>
  16.         </Children>
  17.     </GUITest>
  18. </Controls>
  19.  


Nach dem Auslesen dieser Datei befindet sich im Speicher ein TglGUIManager namens "GUITest" und als dessen Unterkomponenten zwei TglControls namens "TglControl0" bzw. "TglControl1". Auch die Eigenschaften werden korrekt ausgelesen und via RTTI zugewiesen.

Wie der Threadtitel schon sagt ist mein Problem momentan der umgekehrte Weg, also von den Objekten im Speicher zur .xml-Datei.
Hierbei schaffe ich es, in eine bestehende .xml zu schreiben (wenn auch noch nichts von dem, was das Programm erzeugt an das erinnert, was "mustergültigerweise" rauskommen soll, aber das ist nicht das Problem dieses Threads), aber eine neue .xml zu erstellen scheitert kläglich.
Ich hab versucht mit TXMLDocument.LoadFromFile einfach eine Datei zu öffnen die nicht existiert, in der Hoffnung sie würde dann angelegt, aber das funktionierte schonmal nicht.
Nächster Gedankengang war, erstelle das Document mit TXMLDocument.Create, und wenn du am Ende mit TXMLDocument.SaveToFile speicherst wird die Datei wohl hoffentlich angelegt...hier der Code dazu:

Code:
  1.  
  2. Procedure TStreamableParent.WriteToXML(XMLOwner: TComponent; const Path: string);
  3. var
  4.   i:            Integer;
  5.   XMLDocument:  TXMLDocument;
  6.   XMLNode:      IXMLNode;
  7. begin
  8. XMLDocument := TXMLDocument.Create(XMLOwner);
  9. XMLDocument.Filename := Path;
  10. XMLDocument.Active := True;
  11. XMLDocument.Encoding := 'UTF-8';
  12. XMLDocument.StandAlone := 'yes';
  13. XMLDocument.CreateNode('Controls');
  14. XMLNode     := XMLDocument.DocumentElement.ChildNodes['Controls'];
  15.  
  16. try
  17.   WriteToXML(XMLNode);
  18. finally
  19.   XMLDocument.SaveToFile;
  20.   XMLDocument.Active := False;
  21.   XMLDocument.Destroy;
  22. end;
  23. end;
  24.  


In der Zeile unmittelbar nach der Aktivierung des Dokuments knallts mit 'Das angegebene Objekt konnte nicht gefunden werden. Linie 0'.
Was fehlt in meinem Code, bin ich völlig auf dem falschen Pfad - und das für mich wichtigste: Wer kann mir helfen?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jan 27, 2010 01:24 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Er versucht aus Filename zu lesen.
Zumindest würde ich es so interpretieren:
Code:
  1.   XMLDocument1.FileName := '';
  2.   XMLDocument1.Active := True;
  3.   XMLDocument1.Encoding := 'UTF-8';
  4.   XMLDocument1.AddChild('Main');


XMLNode existiert übrigens nur wenn du in den Optionen AutoCreate an hast, denn der erste erstellte Node ist das DocumentElement.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jan 27, 2010 10:17 
Offline
DGL Member

Registriert: Mo Aug 31, 2009 13:19
Beiträge: 151
Das wars tatsächlich, so funktionierts:

Code:
  1.  
  2. Procedure TStreamableParent.WriteToXML(XMLOwner: TComponent; const Path: string);
  3. var
  4.   i:            Integer;
  5.   XMLDocument:  TXMLDocument;
  6.   XMLNode:      IXMLNode;
  7. begin
  8. XMLDocument := TXMLDocument.Create(XMLOwner);
  9. XMLDocument.Filename := '';
  10. XMLDocument.Active := True;
  11. XMLDocument.Encoding := 'UTF-8';
  12. XMLDocument.StandAlone := 'yes';
  13. XMLDocument.AddChild('Controls');
  14. XMLNode     := XMLDocument.DocumentElement.ChildNodes['Controls'];
  15.  
  16. try
  17.   WriteToXML(XMLNode);
  18. finally
  19.   XMLDocument.SaveToFile(Path);
  20.   XMLDocument.Active := False;
  21.   XMLDocument.Destroy;
  22. end;
  23. end;
  24.  


Jetzt muss ich nur noch den Dateiaufbau sortieren :D


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]