Ich bin am Überlegen, ob ich für BaseGraph die Speicherung des Szenegraphen von einer proprietären Textdatei auf ein XML Format umstellen sollte - bzw. ob neue Programme, die unter Delphi textbasierten Output erstellen, dies von vorneherein im XML Format tun sollten. Zu diesem Zweck wäre natürlich eine XML Komponente praktisch, mit der das recht einfach geht - nicht dass ich die entsprechenden Textdateien dann doch wieder selbst schreiben bzw. lesen muss.
Am Liebsten wäre mir eine kleine Bibliothek, die als Source vorliegt und ähnlich problemlos bedienbar ist, wie der XmlTextReader bzw XmlTextWriter unter .NET (Unicode Unterstützung ist nicht notwendig) - allerdings soll das Ganze auf jedem Windows System laufen, ohne dass der Anwender irgendwelche Komponenten nachinstallieren muss, weil das Betriebssystem diverse Objekte nicht zur Verfügung stellt.
Welche Komponenten (sie sollten natürlich frei verwendbar sein und als Source vorliegen) verwendet ihr denn so, wenn ihr unter Delphi XML Dateien generiert?
P.S. ich verwende Delphi 7 Professional für Delphi Projekte, mit Delphi 2005 Personal werde ich nicht so recht warm (wahrscheinlich bin ich ein Gewohnheitsmensch - aber ich finde die "alte" Oberfläche um einiges übersichtlicher - und es ist nicht so, dass ich mich nicht bemüht hätte, dass mir die neue Version gefällt...), sodass ich auch nicht auf die Pro Version updaten werde, da ich für .NET Projekte mit Visual Studio recht zufrieden bin und mit einem Upgrade keine Vorteile für Win32 Projekte sehe.
Ich benutze TJvSimpleXML,
ist im JVCL Packet dabei und kann zur Not auch Problemlos vereinzelt werden (braucht dann 4 oder 5 Dateien von der JVCL und dann ist nicht immer das ganze Packet benötigt).
Das Praktische ist finde ich das man hier auf die unter Elemente direkt über den Index, also
"Item[n]" und zusätzlich über den Namen also "ItemNamed['MyXMLKey']" zugreifen kann.
Auch gut ist das es gleich mehrere Variablen typen unterstützt,
also nicht nur als Strings speichern.
hier ein Beispiel um Daten zu speichern:
Code:
with XML.Root.Items.ItemNamed['Grid'].Items do
begin
Add('UseGrid',Grid);
Add('GridX',GridX);
Add('GridY',GridY);
end;
Hierbei ists egal ob der Wert String,Bool oder Integer ist. Die ganzen funktionen sind alle überladen so das man nicht ständig erst vorher per Hand in String konvertieren muß. Alternativ könnte der Code oben natürlich auch so aussehen :
Code:
with XML.Root.Items.ItemNamed['Grid'].Items do
begin
ItemNamed['UseGrid'].BoolValue := Grid;
ItemNamed['GridX'].IntValue := GridX;
ItemNamed['GridY'].IntValue := GridY;
end;
so würde man es dann machen wenn man irgendwas nicht neu schreibt sondern einen vorhandennen Wert ändert, setzt man TJvSimpleXML.options auf AutoCreate werden die einzelnen Keys automatisch erzeugt sollten sie nicht existieren. (damit kann man sich das Add sparen wenn man es neu erzeugt)
Ist Vom Prinzip eine große Baumstrucktur wie in einem TreeView. Das kann dann durch aus mal so aussehen
das Praktische ist das man auch einfach die einzelnen Stränge in variable vom Typ TJvSimpleXMLElems "linken" kann. Für das oben könnte ich mir also eine Variable 'Theme : TJvSimpleXMLElems' machen die dann aus
Wie das eigentlich deutlich zeigt ists sehr einfach gehalten, aber von der Benutzung nicht gerade sehr Kompliziert. Natürlich werden auch Eigenschaften für die einzelnen Werte unterstützt. Also z.B.
Einziges Problem an XML ist halt das die XML Datei erstmal geladen und in die Baum Strucktur gewandelt werden muß.
Ständiges laden oder speichern (also neu parsen) macht den spaß bei großen XML Dateien verständlicherweise ziemlich langsam.
Danke für die ausführliche Beschreibung. Die Komponente klingt ziemlich brauchbar, insbesondere wenn man sie einfach von der JVCL (die ich nicht nutze) trennen kann.
Ich selbst habe bisher mit XDOM 3.1 (http://www.philo.de/xml/dom/index_de.shtml) geliebäugelt, aber für das einfache Lesen und Schreiben von XML Dokumenten als Ersatz für proprietäre Textdateien kam mir das vor, wie mit Kanonen auf Spatzen zu schießen.
Ja die meisten Komponenten sind finde ich einfach zu Komplex und können zu viel,
bzw. sind sie von der Handhabung zu kompliziert.
TJvSimpleXML unterstützt soweit ich das mitbekommen habe auch CDATA als Werte,
also so das man z.B. auch direkt HTML als Wert speichern kann.
Hab das noch nicht selbst benutzt, soll aber gehen.
So Simpel ist TJvSimpleXML nämlich im Endeffekt nicht,
nur die Bedienung ist auch dann einfach wenn man nur die einfachsten Sachen braucht.
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Ich arbeite auch sehr viel TjvSimpleXML, klein und einfach zu handhaben. Hat aber keine Validierung und ist recht langsam. Wenn es nicht gerade um Dateien im Megabyte - Bereich geht, ist diese Komponente durchaus brauchbar.
Warum nehmt ihr nicht einfach TXMLDocument????? ist in der Unit XMLDoc und schon dabei(delphi7).
DerZugriff über Index oder Name ist übrigens bei allen Klassen möglich die IXMLNode implementieren.
Ich persönlich bin mit TXMLDocument sehr zufrieden ...
p.s.: ich wäre mit Float variablen und Konvertierung nach String SEHR vorsichtig. Weil: Wenn das File mit einer englischen Windows-Variante erzeugt wird, kann man es u.U. nicht mit einer deutschen version laden (Thema dezimal separator), also lieber selber konvertieren:
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Keine Ahnung...
Schreib doch einfach mal in eine Uses-Liste einer Deiner Units XMLDoc oder XmlIntf rein und übersetze. Wenn ers übersetzt, isse dabei wenn nicht Pech.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Also ich hatte mir mal auch eine XMLUnit geschrieben die eine XML Datei in eine leicht auslesbare Objektstruktur verwandelt(mit der Speicherfunktion habe ich angefangen jedoch ist die noch nicht fertig). Den einzigsten Vorteil den diese Unit gegenüber den andern hat ist, das sie keine weitern Units benötigt. Ansonsten dürften die andern Alternativen fast alle besser sein. Solltest du denoch interesse haben kann ich sie hier ja mal hochladen.
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Habe vor kurzem nen XML Parser geschrieben, welches XML dateien komplett ohne fremde hilfe einliesst.
Bisher fehlt nur der part das in ne art Baustruktur zu packen.
Das ganze ist sogar Unicode based, wenn du dran weiterbasteln willst kein problem, der src steht frei zur verfügung da ich momentan eh kaum zeit habe daran weiterzumachen.
Seh grad das ich die aktuelle version im geschäft habe :p
Poste ich morgen grad als unit
TXMLDocument ist bei Delphi 7 professional dabei (hab's grad überprüft) - theoretisch könnte ich das verwenden. Allerdings schreibe ich meinen Code gern so, dass ich nicht von einer bestimmten Kompilerversion abhängig bin (Carad lässt sich etwa von Delphi 5 bis 7 in allen Versionen und Delphi 2005 auch in der PE Version kompilieren) - deswegen wirds wahrscheinlich doch TjvSimpleXML sein, zumal für meine Zwecke die Geschwindigkeit nicht ganz entscheidend ist, da das Einlesen großer Datenmengen nur beim Laden eines Projektes geschieht und der Aufbau der Objekte ja auch Zeit braucht.
Das Destructor Projekt scheint auch interessant zu sein - XML Dateien "händisch" zu erstellen, sollte ja nicht das Problem sein.
@Eigene XML Parser: diese selbst zu schreiben ist sicher keine schlechte Übung, in diesem Fall bin ich aber eher ganz pragmatisch am Nutzen einer fertigen Komponente interessiert - selbstverständlich soll das aber niemanden abhalten, entsprechenden Code zu posten, da dieser sicher für manche interessant sein dürfte.
So hier ist die Unit.
Ist wie gesagt nur der reine Parser auf Unicode Basis.
Fehlt halt das das ganze in ne Art Baumstruktur gepackt wird.
Bin nich so der freund von Rekursiven programmieren, besser gesagt ich hab mir bisher immer Tot-Schleifen mit gebaut ,
deswegen überlass ich das jemand der da schon erfahrung mit hat.
Das Parsen ansich selbst sollte ok sein, bischen mehr fehler abfragen wäre gut aber ansich funzt es.
Nen kleiner ansatz für die Baumstruktur ist auch da:
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.