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

Aktuelle Zeit: Fr Jul 18, 2025 03:48

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



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: XML unter Delphi (Win32)
BeitragVerfasst: So Jul 10, 2005 18:59 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 10, 2005 19:59 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
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:
  1.   with XML.Root.Items.ItemNamed['Grid'].Items do
  2.   begin
  3.     Add('UseGrid',Grid);
  4.     Add('GridX',GridX);
  5.     Add('GridY',GridY);
  6.   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:
  1.  
  2. with XML.Root.Items.ItemNamed['Grid'].Items do
  3.   begin
  4.     ItemNamed['UseGrid'].BoolValue := Grid;
  5.     ItemNamed['GridX'].IntValue := GridX;
  6.     ItemNamed['GridY'].IntValue := GridY;
  7.   end;
  8.  

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
Code:
  1. XML.Root.Items.ItemNamed['Themes'].Items.Item[n].Items.ItemNamed['Background'].Items [...]

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
Code:
  1. Theme := XML.Root.Items.ItemNamed['Themes'].Items.Item[n].Items;

besteht. Hier kann ich dann einfach mit
Code:
  1.  Theme.ItemNamed['Background']...

weiterarbeiten.

Zum lesen von Einstellungen macht man dann z.B. so
Code:
  1.  
  2.   with XML.Root.Items.ItemNamed['Settings'].Items do
  3.   begin
  4.     ThemeID             := IntValue('Theme',0);
  5.     DragAndDrop         := BoolValue('DragAndDrop',True);
  6.     AdvancedCommands    := BoolValue('AdvancedCommands',True);
  7.     AdvancedMM          := BoolValue('AdvancedMemoryManagement',True);
  8.     SingleClick         := BoolValue('SingleClick',False);
  9.     CheckObjectPosition := ItemNamed['CheckObjectPosition'].BoolValue;
  10.     Tooltips            := BoolValue('Tooltips',True);    
  11.   end;
  12.  


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.
Code:
  1.  XML.Root.Items.ItemNamed['Grid'].Items.ItemNamed['UseGrid'].Properties.Add('MyProperty','MyValue');


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.

Ich bin jedoch mit TJvSimpleXML sehr zufrieden :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 10, 2005 20:15 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 10, 2005 21:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 10, 2005 21:39 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Ich hätte da noch den XML-Parser von Dieter Köhler zu nennen (der kann aber auch speichern etc.).
http://www.philo.de/xml/index_de.shtml

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Zuletzt geändert von Frase am Mo Jul 11, 2005 13:44, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 11, 2005 07:07 
Offline
DGL Member

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.

Folgende Parser kenne ich noch:
Jan XML: http://jansfreeware.com/jfdelphi.htm
Destructor: http://www.destructor.de/xmlparser/ (Wobei hier nur ein reiner Parser vorhanden ist und keine Tree-Struktur erzeugt wird. Dafür aber schnell ist)

Da icj die JVCL verwenden, bin ich dann TjvSimpleXML gelandet. Vorher habe ich die XML - Komponente von Jan verwendet.

Gruß
Thomas

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 11, 2005 10:48 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
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:
Code:
  1. Function FloatToStrFile(_dValue: Extended): String;
  2. Var
  3.   oFormatSettings: TFormatSettings;
  4. Begin
  5.   GetLocaleFormatSettings(LANG_ENGLISH,oFormatSettings);
  6.   Result:=FloatToStr(_dValue,oFormatSettings);
  7. End;
  8. Function StrToFloatFile(_sString: String): Extended;
  9. Var
  10.   oFormatSettings: TFormatSettings;
  11. Begin
  12.   GetLocaleFormatSettings(LANG_ENGLISH,oFormatSettings);
  13.   Result:=StrToFloat(_sString,oFormatSettings);
  14. End;
  15.  

_________________
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 11, 2005 13:21 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Ist diese XML-Unit von Borland auch bei der Standard-Version dabei?

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 11, 2005 13:26 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Keine Ahnung...
Schreib doch einfach mal in eine Uses-Liste einer Deiner Units XMLDoc oder XmlIntf rein und übersetze. Wenn ers übersetzt, isse dabei :lol: wenn nicht Pech. :cry:

_________________
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 11, 2005 13:37 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Delphi 2005 PE kennt die beiden nicht.
Scheint also nur ab Prof aufwärts zu gehen.

Der XML-Parser von Dieter Köhler hat aber auch einen Validator und DOM-Support etc...

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 11, 2005 15:31 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 11, 2005 16:03 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
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 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 11, 2005 22:11 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 12, 2005 12:07 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
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:
Code:
  1.  
  2.   TUnicodeXMLAttribute = class
  3.     Name,
  4.     Value : WideString;
  5.   end;
  6.  
  7.   TUnicodeXMLNode = class
  8.     Ident      : WideString;
  9.     Attributes : array of TUnicodeXMLAttribute;
  10.     Childs     : array of TUnicodeXMLNode;
  11.   end;
  12.  


Benötigt als einzige fremd Unit die Unicode Lib von Mike Lischke
Findet man hier: http://www.lischke-online.de/UnicodeLibrary.php


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


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


Wer ist online?

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.

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