![]() |
Zeilenumbruch eines memofeldes in einer xml datei....
... speichern und wieder anzeigen
frage ist? wie mache ich das? :cry: bekomme immer nur ein kästchen zurück könnte mir da mal bitte jemand weiterhelfen? BITTE :cry: Steffi |
Re: Zeilenumbruch eines memofeldes in einer xml datei....
Da Du jetzt nicht gesagt hast, welchen XML-DOM Du nutzt, kann ich Dir auch nur eine grobe Antwort geben: nutze eine CDATA Sektion zum Speichern von Daten, wo auch die exakten "Leerzeichen" wichtig sind ;)
...:cat:... |
Re: Zeilenumbruch eines memofeldes in einer xml datei....
habe keine ahnung was du mit dom meinst
Also ich verwende das folgender masen Memofelder in Datei speichern
Delphi-Quellcode:
Ausgabe der Datei{ Inhalt der XML Datei auf einer Variable erstellen } xml_code := '<?xml version="1.0" encoding="UTF-8"?>'+slinebreak +'<WOCHENBERICHT>'+slinebreak +'<KW>'+kalender_wochen_auswahl+'</KW>'+slinebreak +'<JAHR>'+jahres_auswahl+'</JAHR>'+slinebreak +'<EINTRAEGE>'+slinebreak +'<MONTAG>'+AnsiToUtf8(Hauptmenu.montag_text.Text)+'</MONTAG>'+slinebreak +'<DIENSTAG>'+AnsiToUtf8(Hauptmenu.dienstag_text.Text)+'</DIENSTAG>'+slinebreak +'<MITTWOCH>'+AnsiToUtf8(Hauptmenu.mittwoch_text.Text)+'</MITTWOCH>'+slinebreak +'<DONNERSTAG>'+AnsiToUtf8(Hauptmenu.donnerstag_text.Text)+'</DONNERSTAG>'+slinebreak +'<FREITAG>'+AnsiToUtf8(Hauptmenu.freitag_text.Text)+'</FREITAG>'+slinebreak +'</EINTRAEGE>'+slinebreak +'</WOCHENBERICHT>'; { Dateierzeugung } AssignFile(MyFile, dateiname_speichern ); ReWrite(MyFile); { Inhalt der Variable in die Textdatei schreiben } WriteLn(MyFile, xml_code ); CloseFile(MyFile);
Delphi-Quellcode:
if(FileExists(dateiname_laden))
then begin XML_File := newXMLDocument; XML_File.LoadFromFile(dateiname_laden); Hauptmenu.montag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MONTAG'].Text; Hauptmenu.dienstag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DIENSTAG'].Text; Hauptmenu.mittwoch_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MITTWOCH'].Text; Hauptmenu.donnerstag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DONNERSTAG'].Text; Hauptmenu.freitag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['FREITAG'].Text; end; if not(FileExists(dateiname_laden)) then begin Hauptmenu.montag_text.Text := ''; Hauptmenu.dienstag_text.Text := ''; Hauptmenu.mittwoch_text.Text := ''; Hauptmenu.donnerstag_text.Text := ''; Hauptmenu.freitag_text.Text := ''; end |
Re: Zeilenumbruch eines memofeldes in einer xml datei....
Wie sakura schrieb: Nimm eine CDATA-Sektion, so dass die Datei bspw. so aussieht:
XML-Code:
So bleibt nicht nur der XML-Code intakt (weil er als solcher nicht geparst wird), sondern auch Zeilenumbrüche bleiben erhalten.
<knoten>
<![CDATA[<?xml version="1.0"?> <einknoten> <einUnterknoten/> </einknoten>]]> </knoten> Üblicherweise kommst du beim Erzeugen der XML-Datei mit einem vernünftigen Parser (ja ja, ich weiß schon: Was ist ein Parser? :roll:) viel besser weg. Oft genutzt: ![]() |
Re: Zeilenumbruch eines memofeldes in einer xml datei....
Jetzt wird es in zeilen gespeichert aber nicht in zeilen ausgelesen
|
Re: Zeilenumbruch eines memofeldes in einer xml datei....
BITTE BITTE
der der eine idee hat bitte melden verzweifele noch |
Re: Zeilenumbruch eines memofeldes in einer xml datei....
Hast du irgendwas an deiner Funktion verändert? Oder nimmst du jetzt gar einen XML-Parser? Deine Verzweiflung will ich ja gar nicht anzweifeln, aber mit etwas mehr Informationen zu den Dingen, die du inzwischen gemacht hast, klappt´s auch mit der Hilfe besser.
|
Re: Zeilenumbruch eines memofeldes in einer xml datei....
ok
hier der jetztige quellcode meiner datei und wie ich sie erstelle
Delphi-Quellcode:
und hier der quellcode zum auslesen der datei
{ Inhalt der XML Datei auf einer Variable erstellen }
xml_code := '<?xml version="1.0" encoding="UTF-8"?>'+slinebreak +'<WOCHENBERICHT>'+slinebreak +'<KW>'+kalender_wochen_auswahl+'</KW>'+slinebreak +'<JAHR>'+jahres_auswahl+'</JAHR>'+slinebreak +'<EINTRAEGE>'+slinebreak +'<MONTAG><![CDATA['+AnsiToUtf8(Hauptmenu.montag_text.Text)+']]></MONTAG>'+slinebreak +'<DIENSTAG><![CDATA['+AnsiToUtf8(Hauptmenu.dienstag_text.Text)+']]></DIENSTAG>'+slinebreak +'<MITTWOCH><![CDATA['+AnsiToUtf8(Hauptmenu.mittwoch_text.Text)+']]></MITTWOCH>'+slinebreak +'<DONNERSTAG><![CDATA['+AnsiToUtf8(Hauptmenu.donnerstag_text.Text)+']]></DONNERSTAG>'+slinebreak +'<FREITAG><![CDATA['+AnsiToUtf8(Hauptmenu.freitag_text.Text)+']]></FREITAG>'+slinebreak +'</EINTRAEGE>'+slinebreak +'</WOCHENBERICHT>'; { Dateierzeugung } AssignFile(MyFile, dateiname_speichern ); ReWrite(MyFile); { Inhalt der Variable in die Textdatei schreiben } WriteLn(MyFile, xml_code ); CloseFile(MyFile);
Delphi-Quellcode:
{ wenn eine Datei exsistiert werden die Dateifelder mit deren Daten gefüllt }
if(FileExists(dateiname_laden)) then begin // Anlegen eines Objektes zum Auslesen XML_File := newXMLDocument; // Datei laden XML_File.LoadFromFile(dateiname_laden); // Einträge auslesen Hauptmenu.montag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MONTAG'].text; Hauptmenu.dienstag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DIENSTAG'].Text; Hauptmenu.mittwoch_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MITTWOCH'].Text; Hauptmenu.donnerstag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DONNERSTAG'].Text; Hauptmenu.freitag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['FREITAG'].Text; end; |
Re: Zeilenumbruch eines memofeldes in einer xml datei....
Du schreibst einen formatierten Text in eine Datei, dann liest du diese Datei mit der Methode LoadFromFile() des Objektes XML_File wieder ein. Keine Ahnung, welchen Typ XML_File hat. Da du deine line breaks vermisst, scheint sich ein Parser dahinter zu verbergen, der den eingelesenen Text umformt. Der MSXML Parser kann zur white space preservation animiert werden. Vielleicht geht das bei dir auch?
|
Re: Zeilenumbruch eines memofeldes in einer xml datei....
Habe das problem gelöst
Delphi-Quellcode:
Man muss den #10 von delphi durch eine slinebreak für das memofeld ersetzen und zwar mit StringReplace()
if(FileExists(dateiname_laden))
then begin // Datei wird gespeichert, das immer die aktuellsten Eingaben gespeichert sind datei_speichern; // Anlegen eines Objektes zum Auslesen XML_File := newXMLDocument; // Datei laden XML_File.LoadFromFile(dateiname_laden); montag := StringReplace(XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MONTAG'].text, #10 , slinebreak ,[rfReplaceALL] ); dienstag := StringReplace(XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DIENSTAG'].Text, #10 , slinebreak ,[rfReplaceALL] ); mittwoch := StringReplace(XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MITTWOCH'].Text, #10 , slinebreak ,[rfReplaceALL] ); donnerstag := StringReplace(XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DONNERSTAG'].Text, #10 , slinebreak ,[rfReplaceALL] ); freitag := StringReplace(XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['FREITAG'].Text, #10 , slinebreak ,[rfReplaceALL] ); // Dateinamen festlegen zum Speichern der Datei dateiname_speichern := 'wochenbericht_' + Hauptmenu.kalender_woche.Text + '_' + Hauptmenu.jahr_auswahl.Text + '.txt'; // Datie wird wenn Sie vorhanden ist gelöscht, da sie sonst Fehler verursacht if(FileExists(dateiname_speichern)) then begin DeleteFile(dateiname_speichern); end; // Inhalt der Textdatei wird auf eine Variable erzeugt inhalt_der_txt_datei := 'WOCHENBERICHT'+slinebreak +'KW '+kalender_wochen_auswahl+' JAHR '+jahres_auswahl+slinebreak+slinebreak +'MONTAG: '+slinebreak+montag+slinebreak+slinebreak +'DIENSTAG: '+slinebreak+dienstag+slinebreak+slinebreak +'MITTWOCH: '+slinebreak+mittwoch+slinebreak+slinebreak +'DONNERSTAG: '+slinebreak+donnerstag+slinebreak+slinebreak +'FREITAG: '+slinebreak+freitag; { Dateierzeugung } AssignFile(MyFile, dateiname_speichern ); ReWrite(MyFile); { Inhalt der Variable in die Textdatei schreiben } WriteLn(MyFile, inhalt_der_txt_datei ); CloseFile(MyFile); { Namen der erzeugten Textdatei, zum wiederfinden, anzeigen } unit2.mitteilung.lbl_mitteilung.Caption := 'Es wurde eine Textdatei' +' mit dem Namen '+dateiname_speichern +' erzeugt die sie nun als Anhang in einer Email verwenden können'; unit2.mitteilung.ShowModal; end; das memofeld kennt keine #10 steffi |
Re: Zeilenumbruch eines memofeldes in einer xml datei....
Da Du anscheinend nicht den Hauch einer Ahnung hast, wie man mit XML arbeitet und es sinnvoll nutzt, schlage ich Dir zwei Möglichkeiten vor:
1. Arbeite Dich in das Thema XML/DOM ein. 2. Lass es mit XML und löse Dein Problem auf andere Weise. Nimm's mir nicht übel - manchmal muss man die Dinge halt beim Namen nennen! :wink: -> ansonsten kann ich Dir nur sagen, dass Du den Rat von sakura/MathiasSimmack (CDATA-Section) befolgen solltest! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz