AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte XML IniFiles

XML IniFiles

Ein Thema von TheReaper · begonnen am 24. Sep 2009 · letzter Beitrag vom 25. Sep 2009
Antwort Antwort
TheReaper
Registriert seit: 27. Feb 2003
Hallo,

im Zuge eines größeren Programmes, war ich "gezwungen" meine ini-Datei als XML zu speichern. Deshalb hab ich mir eine Klasse dazu geschrieben. Da ich hier schon oft gelesen habe, das man doch ini-Files als XML speichern soll, dachte ich mir, dass ich die Klasse auch gleich mal veröffentlich kann.

Die Klasse heißt TXMLIniFile aus der Unit XMLIniFiles. Sie ist von der TCusotmIniFile abgeleitet und benötigt die MSXML2_TLB. Sie ist "Copy and Paste" fähig. Das heißt man kann sie genauso handhaben wie die normale TIniFile, sie reagiert gauso wie in der Dokumentation der TIniFile beschrieben und es sind keine Änderungen (außer natürlich die Klassen austauschen ) im bestehenden Code nötig. Deshalb verzichte ich auch auf ein Tutorial oder Demo.

Vielleicht kann sie der ein oder andere gebrauchen.



Über Fragen, Anregungen und Kritik freue ich mich natürlich.

[edit]Neue Version[/edit]
Angehängte Dateien
Dateityp: zip xmlinifiles_285.zip (23,6 KB, 125x aufgerufen)
 
Benutzerbild von himitsu
himitsu

 
Delphi 10.4 Sydney
 
#2
  Alt 24. Sep 2009, 20:46
Ein großes Problem gib es:
Nimm mal Namen für "Section" oder "Ident", welche nicht den Namenskonventionen für einen XML-Node entsprechen ....... dann knallt's und MSXML haut dir Exceptions um die Ohren!

z.B. ein Leerzeichen im Namen oder ein Name, welcher mit einer Zahl beginnt

aber sonst sieht es anscheinend OK aus



darum hier mal der Aufbau meiner XML als Vorschlag
XML-Code:
<?xml ... ?>
<ini>
  <section name="{sectionName}">
    <ident name="{identName}">{value}</ident>
    ...
  </section>
  ...
</ini>
(hab in meinem himXML auch soeine Klasse, nur daß ich da halt eine andere XML-Klasse verwende und einige der Typen/Strings selber umgewandele, damit sie mehr mit dem allgemeinen Aufbau/Verständnis von vielen XML-Parsern übereinstimmen, wie z.B. das Format der Datums-Strings)

[edit]
da jemand der Meinung war ich solle doch ...
Matze: An deiner Stelle hätte ich "himXML" verlinkt. Dann ist es gleichzeitig bessere Werbung
himitsu: ich wollt ihm nur den Namen nennen, falls er selber nachsehn will und als Quellenangabe für die gepostete XML
Matze: vllt denkt er, das sei was internes von dir, das nicht Open-Source ist. Daher die verlinkung.
Aber is au net tragisch. War nur son Geheimtip ^^

Hier im Forum suchenhimXML siehe Unit himXML_Tools (oder ausgekoppelt in himXML_Ini, in der Beta)

aber bezüglich der Werbung:
vor Delphi 2006 und für alle, die nur eine Kleine Ini-Unit einbinden wollen, würde ich deines empfehlen
(also wenn du dann das Problemchen mit dem Leerzeichen beseitigt hast, da dieses doch schon öfter mal in solchen Namen vorkommen)
  Mit Zitat antworten Zitat
TheReaper

 
Delphi 2005 Personal
 
#3
  Alt 24. Sep 2009, 22:10

Da hast du natürlich recht. Daran hab ich gar nicht gedacht. Naja, neue Version ist hochgeladen und das Problem sollte jetzt weg sein. Dein Beispiel ist am besten und hab das auch gleich als Vorlage genommen. Ich hätts auch nich anders gemacht.

Dein himXML ist ja hier in der DP nicht zu übersehen und ich weiß, dass da so eine Klasse dabei ist. Aber ich muss zugeben, ich habs mir trotzdem noch nie angeguckt. Aber ich schreib XML zeugs lieber selber. Da weiß ich was ich hab und kann das perfekt für mein Programm optimieren.

Wer noch Fehler findet, kann sie natürlich posten.
  Mit Zitat antworten Zitat
taaktaak

 
Delphi 7 Professional
 
#4
  Alt 25. Sep 2009, 07:45
Moin, Moin.

Habe das mal an meinem "rzDelphiGuide" ausprobiert - es funktioniert ohne Probleme. Ich stelle mir allerdings die Frage, was ist besser an XmlIniFile als an dem uralten IniFile? Kann eigentlich nur feststellen: Die INI-Datei wird in meinem Fall etwa 25% größer und unleserlich?
  • Worin liegt der Vorteil gegenüber dem IniFile?
  • Mit welchem Programm kann man die Datei mit leserlicher Struktur anzeigen?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 10.4 Sydney
 
#5
  Alt 25. Sep 2009, 09:39
Nja, ich seh einfach den Vorteil darin, daß man leicht älte Projekte, welche noch als INI speichern auf XML umstellen kann, um dann in neueren Projekten dann richtig mit XML weiterzuarbeiten.

Im grunde umgeht man damit einige Probleme der INI
- Größenbeschränkung (OK, dafür gibt es andere Klassen)
- und du kannst in der XML auch Daten speichern, welche in die INI garnicht reinpassen

Hier mal ein einfaches Beispiel für mehrzeiligen Text:
uses IniFiles;

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var ini: TIniFile;
begin
  ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
  ini.WriteString('section', 'ident', 'mehrzeiliger'#13#10'Text');
  Memo1.Text := ini.ReadString('section', 'ident', '');
  ini.Free;
end;
Dieser steht dann zwar in der INI drin, aber läßt sich nicht mehr auslesen,
da Value nur bis Zeilenende ausgelesen wird.
Code:
[section]
ident=mehrzeiliger
Text
Es ist also gut um ein altes Projekt "aufzurüsten", ohne viel ändern zu müssen,
oder für Leute, die zwar "aufrüsten" und mit XML arbeiten wollen, aber sich einfach nicht trauen (angst haben, daß sie es nicht schaffen) und dann praktisch die XML genauso handhaben, als wäre sie eine bekannte INI.
  Mit Zitat antworten Zitat
taaktaak

 
Delphi 7 Professional
 
#6
  Alt 25. Sep 2009, 10:12
Zitat:
und du kannst in der XML auch Daten speichern, welche in die INI gar nicht reinpassen
Ahh, ja, das ist allerdings ein sehr gutes Argument. Und das funktioniert dann alles mit der himXML?! Muss ich mir mal anschauen...

Offen ist noch meine Frage: Mit welchem Programm man sich so eine XML-Datei vernünftig anzeigen lassen? Mit Notpad & Co. ist das nicht so prickelnd was man zu sehen bekommt.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 10.4 Sydney
 
#7
  Alt 25. Sep 2009, 10:25
himXML selber ist eine eigenständige XML-Implementation ... ähnlich wie das MSXML-DOM, welches hier verwendet wurde.
(bin allerdings noch in der Aufbau.Phasen dieser Klassen)

Die TXMLIniFile (hey, unsere Klassen heißen sogar gleich ) macht im Grunde auch das,
welches hier gemacht wurde, nur das es eine andere XML-Implementation im Hintergrund verwendet.
  Mit Zitat antworten Zitat
taaktaak

 
Delphi 7 Professional
 
#8
  Alt 25. Sep 2009, 10:28
... dann gibt es in himXML (TXMLIniFile) noch keine fertigen Methoden um z.B. ein Integer-Array zu speichern bzw. zu lesen? Wenn nicht, ist das geplant?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 10.4 Sydney
 
#9
  Alt 25. Sep 2009, 10:57
Zitat von taaktaak:
... dann gibt es in himXML (TXMLIniFile) noch keine fertigen Methoden um z.B. ein Integer-Array zu speichern bzw. zu lesen? Wenn nicht, ist das geplant?
Gute frage, da mußte ich selber nochmal nachschauen

Es ist auch dort nur das umgesetzt, welches in der original TIniFile drin steckt

Also du kannst einen Stream speichern.


Ansonsten müßte ich eigentlich nur meine Serialisierung durchschleifen.
in himXML selber gibt es ja eine Serialisierung für Records (welche Arrays enthalten können) und Variants (die für Objekte kann immernoch nicht das einmal Gespeicherte auslesen, bzw. der Code dafür ist noch nicht freigegeben)


Also was die Funktionen der originalen TIniFile angeht, ist der Code von hier natürlisch schön klein und übersichtlich und bietet das Selbe wie meine Klassen
  Mit Zitat antworten Zitat
TheReaper

 
Delphi 2005 Personal
 
#10
  Alt 25. Sep 2009, 11:37
Meine TXMLIniFile ist wirklich nur für den Umstieg auf XML geeignet. Für ein neues Projekt würde ich es auch "richtig" machen. Erst recht wenn man sowieso himXML verwenden will. Obwohl, wenn man nichts großartiges Initialisieren will, geht das schon.


Zitat von taaktaak:
  • Worin liegt der Vorteil gegenüber dem IniFile?
Die Vorteile kann ich die von himitsu genannten nur bestätigen. Dazu kommt noch, dass Delphi MSDN-Library durchsuchenWritePrivateProfileString verwendet. Die MSDN Doku sagt dazu:
Zitat:
Note This function is provided only for compatibility with 16-bit versions of Windows. Applications should store initialization information in the registry.
Es ist also nur eine Frage der Zeit bis, IniFiles von Windows deprecated sind.


Zitat von taaktaak:
  • Mit welchem Programm kann man die Datei mit leserlicher Struktur anzeigen?
Mit so ziemlichen jedem Bei Google suchenXML-Viewerkann man XML-Dateien Ansehen IE, VisualStudio... Notepad ist eher weniger geeignet, weil keine Whitespaces gespeichert werden. deshalb auch die etwas komische Form.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf