AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OmniXML TOmniXMLReader / TOmniXMLWriter

Ein Thema von Adrenalin · begonnen am 9. Sep 2012 · letzter Beitrag vom 9. Sep 2012
Antwort Antwort
Seite 1 von 3  1 23      
Adrenalin

Registriert seit: 8. Sep 2012
16 Beiträge
 
#1

OmniXML TOmniXMLReader / TOmniXMLWriter

  Alt 9. Sep 2012, 10:18
Morgen
Ich hab da noch einmal eine kleine Frage.
Ich hab da bei Stackoverflow mal gelesen gerade, dass man mit dem TOmniXMLReader / TOmniXMLWriter Anwendungsdaten in eine XML schreiben bzw lesen kann. Was ich schon mal Prima fand, weil man anscheinend sich um nichts kümmern muss OmniXML soll das wohl über ein TPersistent lösen was man zuvor anlegt und er schreibt / liest das ganze dann quasi in einem Rutsch.

Das hab ich gerade mal versucht. Allerdings war das nicht so ganz von Erfolg gegrönt.
Also das Problem tritt eigentlich nur an einer Stelle auf und zwar dann wenn ich die XML spaeter wieder lesen möchte...

Mein Problem scheint wohl zu sein das der Writer wohl die Daten schreibt (Es befindet sich ein Memo auf meinem Formular der Inhalt soll in die XML was auch gemacht wird allerdings sieht das ganze etwas seltsam aus

Ich bin da so vorgegangen Anhand des Beispiels hab ich ein Persistent angelegt was über 2 Stringlisten verfügt. Die eine Stringliste soll halt mit dem Text aus dem Memo gefüllt werden.

Ich hoffe mal ich hab das halbwegs Korrekt gemacht
Delphi-Quellcode:
type
  TTestType = (ttEins, ttZwei);

type
  TAppConf = class(TPersistent)
  private
    FFileName: string;
    FTestPropName: string;
    FTestPropType: TTemplateType;
    FMemoInhalt: TStringList;
  published
     constructor Create(const FileName: string); overload;
     destructor Destroy; override;
     procedure LoadConf(const Filename: string);
     procedure SaveConf(const Filename: string);
     property TestPropName: string read FTestPropName write FTestPropName;
     property TestType: TTestType read FTestType write FTestType;
     property MemoInhalt: TStringList read FMemoInhalt write FMemoInhalt;
     property Filename: string read FFilename write FFilename;
  end;
Gespeichert hab ich das ganze dann über:

  TOmniXMLWriter.SaveToFile(self, FFilename, pfNodes, ofIndent);
Und so geladen:
  TOmniXMLReader.LoadFromFile(self, FFilename); Jetzt sieht der Inhalt meiner XML gespeichert so aus:
Code:
<data PropFormat="node">
  <TAppConf>
    <TestPropName>MoinMoin</TestPropName>
    <TestType>ttEins</TestType>
    <MemoInhalt Count="4">
      <l0>IchKommausDemMemo</l0>
      <l1>IchAuch</l1>
      <l2>IchSowieso/</l2>
      <l3>IchBinDerLetzte</l3>
    </MemoInhalt>
  </TAppConf>
</data>
Wenn ich das XML wieder einlesen möchte, geht das ganz gut bis zu dem Punkt wenn ich auf MemoInhalt zugreife und den Inhalt halt dem richtigen Memo auf der Form zuweisen will dann, knallts ($C0000 irgendwas)...

Jetzt war meine Überlegung das das Format da in dem XML in dem Knoten MemoInhalt nicht passt und somit nicht gelesen werden kann? Bzw. das OmniXMLPersistent Teil damit nichts anzufangen weiß.

Nur wie stell ich das jetzt an das ich nicht nur Knoten erstellen kann die einzeilig sind, da ich unter Umstaenden einen laengeren Text schreiben und lesen muss?

Hier mal der Link wo ich das gelesen hatte:
http://stackoverflow.com/questions/2...-xml-file?rq=1

Viele Grüsse

Geändert von Adrenalin ( 9. Sep 2012 um 10:23 Uhr) Grund: Ja ich bin vergesslich:(
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

AW: OmniXML TOmniXMLReader / TOmniXMLWriter

  Alt 9. Sep 2012, 11:01
Ist MemoInhalt vielleicht = nil?
Könnte sein, dass Du das Objekt manuell intialisieren musst...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: OmniXML TOmniXMLReader / TOmniXMLWriter

  Alt 9. Sep 2012, 11:11
Ist MemoInhalt vielleicht = nil?
Könnte sein, dass Du das Objekt manuell intialisieren musst...
Wenn MemoInhalt nil ist kann dann MemoInhalt gespeichert werden in der XML?
Wobei ich seh ja nicht ob er die Sachen erstellt aber ich geh einfach mal davon aus
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

AW: OmniXML TOmniXMLReader / TOmniXMLWriter

  Alt 9. Sep 2012, 11:30
Wenn MemoInhalt nil ist kann dann MemoInhalt gespeichert werden in der XML?
Wobei ich seh ja nicht ob er die Sachen erstellt aber ich geh einfach mal davon aus
Objekt.MemoInhalt := Memo1.Lines as TStringList;

Er hat ja nicht gesagt, ob das auslesen direkt danach erfolgt oder erst beim Programmstart, wo das Objekt dann ja vielleicht wirklich "nil" sein könnte...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Adrenalin

Registriert seit: 8. Sep 2012
16 Beiträge
 
#5

AW: OmniXML TOmniXMLReader / TOmniXMLWriter

  Alt 9. Sep 2012, 11:35
Hallo
Gut das ich da bin...

Nein ich erstelle Natürlich vorher das Objekt und greife Danach erst darauf zu, ich dachte das ergibt sich daraus das ich schrieb, das alle anderen Sachen ausgelesen werden können nur nicht wenn ich auf das Feld MemoInhalt zugreife... Deshalb bin ich davon ausgegangen das Omni mit von sich selbst gespeichertem Format nicht klar kommt.

Gruss
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

AW: OmniXML TOmniXMLReader / TOmniXMLWriter

  Alt 9. Sep 2012, 12:13
Dann zeig mal bitte den Code, wie Du auf MemoInhalt genau zugreifst.

Konnte im OmniXML Code keinen Fehler erkennen, auch nicht im erzeugten XML...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Adrenalin

Registriert seit: 8. Sep 2012
16 Beiträge
 
#7

AW: OmniXML TOmniXMLReader / TOmniXMLWriter

  Alt 9. Sep 2012, 20:04
Conf ist Public

Speichern:

Delphi-Quellcode:
procedure TMainForm.Button4Click(Sender: TObject);
var ConfPath: String;
begin
  ConfPath := TPath.Combine(ExtractFilePath(Application.ExeName), 'data\');
  Conf := TAppConf.Create;
  Conf.MemoInhalt.Text := Memo1.Lines.Text;
  try
    Conf.SaveConfig(ConfPath + 'data.xml');
  finally
     Conf.Free;
  end;
end;
Laden:
Delphi-Quellcode:
var ConfPath: String;
begin
  ConfPath := TPath.Combine(ExtractFilePath(Application.ExeName), 'data\');
  Conf := TAppConf.Create();
  try
    Conf.LoadTemplate(ConfPath + 'data.xml');
    Memo1.Lines.Text := Conf.MemoInhalt.Text;
  finally
     Conf.Free;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#8

AW: OmniXML TOmniXMLReader / TOmniXMLWriter

  Alt 9. Sep 2012, 20:18
Also hier bei dem Code sehe ich kein Problem.

Ich muss nochmal nachfragen:
Führst Du wirklich selbst ein
MemoInhalt := TStringList.Create; im constructor von TAppConfig durch? (Und dann ein .Free() im destructor...)

Du kannst auf alle anderen Properties ohne Initialisierung zugreifen, da es ja keine Klassen bzw. Objekte sind...
Der Reader erzeugt das TStringList-Objekt nicht von selbst, sondern lädt nur die Sachen aus dem XML in ein vorhandenes rein. Und der OmniReader prüft auch auf <> nil, bevor er das Objekt anfasst und die Sachen aus der XML reinlädt (daher auch keine Exception an der Stelle)...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Adrenalin

Registriert seit: 8. Sep 2012
16 Beiträge
 
#9

AW: OmniXML TOmniXMLReader / TOmniXMLWriter

  Alt 9. Sep 2012, 20:19
Also hier bei dem Code sehe ich kein Problem.

Ich muss nochmal nachfragen:
Führst Du wirklich selbst ein
MemoInhalt := TStringList.Create; im constructor von TAppConfig durch? (Und dann ein .Free() im destructor...)

Du kannst auf alle anderen Properties ohne Initialisierung zugreifen, da es ja keine Klassen bzw. Objekte sind...
Der Reader erzeugt das TStringList-Objekt nicht von selbst, sondern lädt nur die Sachen aus dem XML in ein vorhandenes rein. Und der OmniReader prüft auch auf <> nil, bevor er das Objekt anfasst und die Sachen aus der XML reinlädt (daher auch keine Exception an der Stelle)...
Ja ich create die Stringlist im Constructor
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#10

AW: OmniXML TOmniXMLReader / TOmniXMLWriter

  Alt 9. Sep 2012, 20:29
Und wenn Du mit Lines.Assign() arbeitest?

Memo1.Liens.Assign(Conf.MemoInhalt);
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 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