Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi XML-Tutorial (https://www.delphipraxis.net/7356-xml-tutorial.html)

CalganX 10. Aug 2003 12:24


XML-Tutorial
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mich mal drangesessen ein Tutorial zu schreiben.
Es ist mir schon oft in der DP aufgefallen, dass viele XML lernen wollen und deswegen habe ich mein bescheidenes Wissen über XML in ein Tutorial verfasst.
Mit der Hilfe von Mathias und Christian und allen anderen, die mir geholfen haben das Tutorial zu verbessern, ist das Tutorial nun - hoffentlich - fehlerfrei.

Im Laufe der Zeit werde ich immer mal wieder Sachen einbauen und Sie Anhängen.

Das im Tutorial programmierte Programm habe ich leider bisher noch nicht hochladen können, werde das aber schnellstmöglich nachholen.

Viel Spaß und Erfolg mit dem Tutorial!

Chris

Download-Update (März, 2007): Download auch wieder über meine Website. http://blog.calganx.net/artikel/xml-tutorial/
Ist aber immer noch die Version 2.1 (derzeit aktuellste Version aus dem Jahr 2003). Ich denke immer noch über eine Version 3.0 nach. Wer mich unterstützen will, darf mir gerne finanzielle Unterstützung zu kommen lassen. :mrgreen:

CalganX 4. Sep 2003 21:09

Re: XML-Tutorial
 
Hi,
endlich ist es soweit: eine überarbeitete Version des XML-Tutorials. Vielleicht - hoffentlich - ein wenig besser, als die alte Version.

Downloadlink: http://www.csd-software.net/download...utorial_20.pdf
Weitere Infos und immer aktuelle Versionen: http://www.csd-software.net/tutorials/xml.php

In den nächsten Wochen gibt es dann auch 2.5, in der es dann auch um Attribute gehen wird.

An dieser Stelle noch mal Dank an Mathias Simmack, der mal wieder das Tutorial korrigiert hat! :thuimb:

Viel Spaß,
Chris

CalganX 27. Sep 2003 18:52

Re: XML-Tutorial
 
Hi,
jetzt habe ich ganz schnell mal eine neue Version hochgeladen. Ein paar Fehler hatten sich eingeschlichen. ;)
Des Weiteren ist das Kapitel zum Löschen von Datensätzen nun drin.

Download: http://www.csd-software.net/download...utorial_21.pdf
Projektwebsite: http://www.csd-software.net/tutorials/xml.php

Viel Spaß beim Lesen,
Chris

aps 28. Sep 2003 09:08

Re: XML-Tutorial
 
Auf deiner Seite hast du übrigens die alte Version 2.0 verlinkt... :-)

CalganX 28. Sep 2003 09:39

Re: XML-Tutorial
 
Hi,
Zitat:

Zitat von aps
Auf deiner Seite hast du übrigens die alte Version 2.0 verlinkt... :-)

*argh* danke für den Hinweis!

Chris

aps 15. Dez 2003 14:54

Re: XML-Tutorial
 
Zitat:

Zitat von Chakotay1308
In den nächsten Wochen gibt es dann auch 2.5, in der es dann auch um Attribute gehen wird.

Wie sieht es denn damit aus? Ich stehe nämlich genau vor dem Problem, dass ich die Attribute irgendwie nicht reinkriege und jemanden bräuchte, der es mir vormacht ;-)

Edit: Hat sich erledigt, ich weiß mittlerweile, wie es geht. Trotzdem danke

CU
aps

CalganX 15. Dez 2003 15:30

Re: XML-Tutorial
 
Hi,
derzeit hab ich akuten Zeitmangel. Aber ich denke in den Ferien, die am kommenden Wochenende beginnen werde ich ein wenig weitermachen. :|

Chris

p0ke 27. Dez 2003 11:43

Re: XML-Tutorial
 
Ich wollte jetzt auch mal das Tutorial durchackern, um überhaupt mal ein wenig XML zu kapieren. (habe kein Bock mehr für meine kleinen Projekte immer gleich ne Interbase oder Firebird Datenbank zu generieren ;) ) Hab allerdings Probleme in Unit2 in der OnClick Routine.

Folgende Zeile macht mir da Sorgen:

Delphi-Quellcode:
newSub.text:=IntToStr(MainForm.MovieList.items[MainForm.MovieList.Items.Count - 1].Caption) +1;
Wenn ich das richtig sehe, wird hier ja wohl nur eine Art eindeutiger Datensatzschlüssel generiert, der fortlaufend hochzählt. Der Befehl da oben versucht aber den String mit +1 hochzuzählen.

Irgendwie könnte ich das sicher umbauen, nur weiß ich nich wo sich das evtl. auswirkt und ggf. kann Meister XML dann sein Tutorial gleich korrigieren :)

Oder hab ich doch irgendwie n altes Tutorial erwischt?


Gruss

p0ke

MathiasSimmack 28. Dez 2003 08:20

Re: XML-Tutorial
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mal seh´n, ob ich das noch richtig im Kopf habe -

In der von dir genannten Zeile wird der Wert der "id" ermittelt, die im MovieOrganizer bis einschließlich Version 1.7 als Wert in der List-View gespeichert wurde. Das bedeutet, im Normalfall steht also eine Zahl drin, die demzufolge auch mit +1 um Eins erhöht werden kann.

Allerdings (Achtung, persönliche Meinung!) fand ich diese Sache mit der "id" überflüssig, darum flog sie in der (inoffiziellen) Version 1.8 vom MO auch raus. Ich häng´s mal ran. Aber bitte bedenken: die Version ist von mir be- und überarbeitet worden. Zwar hatte ich den Segen von Chakotay, aber offiziell veröffentlicht (auf Chakotays Webseite, meine ich) wurde sie IMHO bisher nie.

Es ist halt etwas problematisch, wenn sich ein Tutorial nur grob an einem Programm orientiert, weil man nicht wirklich etwas hat, das man überprüfen kann. @Chakotay: du kannst ja mal überlegen, ob du das XML-Tutorial nicht doch mal wieder an die aktuelle MO-Version anpassen willst. Für die Attribute ließe sich ja auch ein eigenes Kapitel schreiben, das sich auf ein anderes Programm bezieht. :)

CalganX 28. Dez 2003 10:05

Re: XML-Tutorial
 
Hi,
kein Stress, viel Zeit und keine Lust. ;)
Ne... ich werde mich morgen wieder dransetzen. Aber erstmal ist der MovieOrganizer dran, der jetzt mal wieder angepasst wird (@Mathias: nein, nicht viel nur ein wenig) und ein Setup bekommt (ggf. probier ich mal den Installshield aus :gruebel:).

Danach werde ich das Tutorial überarbeiten. Allerdings bin ich mir noch nicht sicher, ob das Tutorial weiterhin an dem MovieOrganizer anlehnt, oder nicht. Mal schau'n.

Chris

p0ke 28. Dez 2003 12:18

Re: XML-Tutorial
 
Zitat:

Zitat von MathiasSimmack
Allerdings (Achtung, persönliche Meinung!) fand ich diese Sache mit der "id" überflüssig

Also ich lass die ID erstmal drin. Bins sonst von den Datenbanken gewohnt, das man immer irgendwo n eindeutigen Schlüssel hat. Um von meiner Seite aus zu sagen ob ich die ID nun im XML wirklich brauche oder nicht, dazu hab ich noch zu wenig Hintergrundwissen was das anbelangt.


Aber danke für den Source, inzwischen hatte sich das allerdings auch erledigt.


mfg

p0ke

MathiasSimmack 28. Dez 2003 17:46

Re: XML-Tutorial
 
Zitat:

Zitat von p0ke
Also ich lass die ID erstmal drin. Bins sonst von den Datenbanken gewohnt, das man immer irgendwo n eindeutigen Schlüssel hat. Um von meiner Seite aus zu sagen ob ich die ID nun im XML wirklich brauche oder nicht, dazu hab ich noch zu wenig Hintergrundwissen was das anbelangt.

Bei einer echten Datenbank mag so eine eindeutige ID ja auch durchaus Sinn machen. Selbst bei unterschiedlichen Sortierungen kann man immer noch recht fix die jeweils höchste ID ermitteln und als Basis für den nächsten Eintrag nehmen. Oder man verwendet eine ID, die automatisch und ohne Zutun des Anwenders erhöht wird.

Hier, in diesem speziellen Fall wird die jeweils nächste ID immer aus dem Wert des letzten Items in der List-View gebildet:
Delphi-Quellcode:
MainForm.MovieList.items[MainForm.MovieList.Items.Count - 1].Caption
Das ist dann problematisch, wenn du eine Sortierung einbaust. Sagen wir: der Film "Stargate" hat die ID 1, weil du ihn zuerst eingetragen hast. Und "Casablanca" hat meinetwegen die ID 2, weil du ihn später eingetragen hast. Lässt du jetzt alfabetisch sortieren, dann wird "Casablanca" logischerweise vor "Stargate" angezeigt.
Evtl. ist "Stargate" auch der letzte Film in der Liste, womit nun die ID 1 am Ende steht. Wenn du jetzt einen neuen Film hinzufügst (ohne vorher wieder nach IDs zu sortieren), dann wird durch die o.g. Codezeile die 2 als "neue" ID berechnet.

Um also die tatsächlich echte nächste ID zu ermitteln, müsstest du die List-View intern umsortieren bzw. alle Items durchgehen und die höchste Zahl suchen. Und weil das umständlich ist, habe ich darauf verzichtet. Und mal ehrlich: spielt es eine Rolle, mit welcher ID die Filme archiviert werden? Wichtiger ist IMHO die Anzeige der Filmnamen und die mögliche Sortierung nach Genre, Typ (DVD, usw.), Bewertung und dergleichen.

p0ke 29. Dez 2003 14:17

Re: XML-Tutorial
 
Hi Mathias,

danke für die Erläuterungen.

Ich habe allerdings in deinem Source gesehen, das du schlicht den Namen als "eindeutigen Schlüssel" um es mal so zu nennen verwendest. OK, macht Sinn, weil du davon ausgehen kannst , dass niemals ein und derselbe Film in der Liste steht. Sollte es doch der Fall sein, weil du Stargate einmal auf DVD und einmal als MPEG hast, dann siehts aber wieder schlecht aus, hab ich Recht?

Ich habe jetzt folgendes gemacht, da ich bei meinem geplanten Projekt auch das Datum brauche wann der Datensatz angelegt wurde, nehme ich ein UnixTimeStamp als Schlüssel. Das sollte sich normal nich wiederholen, oder was hälst du davon?

Keine Ahnung ob ich überhaupt jetzt alles richtig verstanden habe. Wenn nich, klär mich bitte nochmal auf.


Bis dann

p0ke

Phoenix 20. Jan 2004 10:06

Re: XML-Tutorial
 
Kleine Anmerkung, auch wenn ich jetzt wieder als Klugscheisser verschrien werde.. ;-)

Zitat:

Zitat von Tutorial Seite 5
Denn HTML basiert auf XML.

Das ist so nicht korrekt.

HTML basiert auf SGML. Das W3C hat sich dann etwas später zusammengesetzt und war der Meinung, HTML hat einige gravierende Nachteile für den Informationsaustausch - SGML ist dafür aber viel zu komplex.

Somit wurde aus den Vorteilen von SGML und HTML hinterher XML entwickelt. Ein best of both worlds sozusagen.

Korrekt wäre also:
Zitat:

Denn XML basiert auf HTML und dessen vorgänger SGML.
Vielleicht für eine neue Version... :)

CalganX 20. Jan 2004 13:28

Re: XML-Tutorial
 
Hi,
okay! Werde ich korrigieren.

Danke,
Chris

DirkH 5. Feb 2004 09:49

Re: XML-Tutorial
 
Arbeite mich ja auch grade durch das Tutorial, komme auch an dieser Stelle nicht weiter.

Delphi-Quellcode:
newSub.text:=IntToStr(MainForm.MovieList.items[MainForm.MovieList.Items.Count - 1].Caption) +1;

Mir ist die sortierung, die ich dann vornehmen kann, oder auch nicht :wink: ziemlich egal. Dient ja erstmal nur zur einleitung.

Kann mir bei dem Problem einer helfen ?

Alexander 5. Feb 2004 15:16

Re: XML-Tutorial
 
jetzt müsstest du nur noch das Problem erläutern :gruebel:

Luckie 18. Apr 2004 21:20

Re: XML-Tutorial
 
Jetzt habe ich auch mal eine Frage. :mrgreen:

Im Tutorial steht in etwa folgender Code:
Delphi-Quellcode:
if not FileExists(FFilename) then
  begin
    // create new XML file
    FXMLDoc.loadXML('<?xml version="1.0"?><adressdb></adressdb>');
  end
  else
  begin
    // open and parse existing file
    FXMLDoc.load(FFilename);
  end;
Es geht mir um den if-Abschnitt. Im Tutorial steht dazu sinngemäß: "danach prüfen wir, ob eine XML-Datei existiert und wenn nein, dann soll eine XML-Datei erstellt werden..."
Sprich dieseZzeile:
Delphi-Quellcode:
FXMLDoc.loadXML('<?xml version="1.0"?><adressdb></adressdb>');
erstellt eine neue Datei. Nur woher weiß das Programm, wie sie heißen soll und wo sie gespeichert werden soll? Nun ja. Im Tutorial kommt da nach nur noch ein grausames Application.Terminate. Im Tutorial kommt nicht mehr und bei mir auch nicht. Und ich gehe jede Wette ein mit dem Tutorial Code wird auch keine datei erstellt, wie es bei mir der Fall ist.

Wie also erstelle ich eine neue XML-Datei richtig?

MathiasSimmack 18. Apr 2004 21:47

Re: XML-Tutorial
 
Im Prinzip passt das schon mit dem Code. Gespeichert wird sie dann im Beispielprogramm an anderer Stelle durch
Delphi-Quellcode:
xmldoc.save('test.xml');
(der Dateiname ist natürlich ein anderer). Die von dir gezeigte Zeile mit der Anweisung "loadXML" dient nur dazu, den XML-Code im Speicher zu erzeugen wenn die gesuchte Datei nicht existiert. Hintergedanke: Was nicht da ist, kann nicht geladen werden. Also muss die Datei neu angelegt werden. Und mit der genannten Anweisung kannst du den XML-Code quasi als String übergeben, und dann lassen sich die einzelnen Objekte ansprechen.

btw: Durch deine Fragerei mit der Suche nach mehreren gleichen Namen hast du mich auf eine Idee gebracht, die ein Update von Chakotays Movie Organizer zur Folge hatte. ;)

Edit-PS:
Zitat:

Zitat von Luckie
Und ich gehe jede Wette ein mit dem Tutorial Code wird auch keine datei erstellt, wie es bei mir der Fall ist.

Die Wette verlierst du. Das einzige Problem ist, dass Tutorial und tatsächlicher Code des Beispielprogramms Movie Organizer nicht mehr so richtig zusammen passen.

Tillmet 15. Mai 2004 09:52

Re: XML-Tutorial
 
Sorry, falls ich was überlesen habe, was mein Problem behebt, aber soweit ich das sehe, gehen die ganzen Links mit den neuen Versionen des Tuts nicht mehr, nur die Einführung, ist das so richtig?

CalganX 15. Mai 2004 10:03

Re: XML-Tutorial
 
Hi,
:gruebel: Genau.... das Problem ist, dass derzeit mein Webserverprobleme hatte mit dem Download der Dateien. Deswegen bin ich dabei den Downloadbereich etwas umzustrukturieren. Heute abend dürfte es wieder gehen.

Chris

Nicodius 15. Mai 2004 10:04

Re: XML-Tutorial
 
könntest dus mir schicken *dackelblick*


email: s.mueller@inode.at

danke ich brauchs nämlich gaaaaanz dringend :D

Tillmet 15. Mai 2004 10:16

Re: XML-Tutorial
 
Ok, danke
Kannst dann ja gleich posten, wenns wieder on is, könnte es dann gut gebrauchen ^^

CalganX 15. Mai 2004 10:16

Re: XML-Tutorial
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
hab die aktuelle Version mal angehängt.

Chris

Nicodius 15. Mai 2004 10:55

Re: XML-Tutorial
 
danke

Nicodius 15. Mai 2004 10:55

Re: XML-Tutorial
 
Ne geht irgendwie nicht :cry:



//Edit: sorry wegen dem doppelpost

CalganX 15. Mai 2004 11:01

Re: XML-Tutorial
 
Wie geht irgendwie nicht? :gruebel:

Bei mir funktioniert der Download via Anhang. ;)

Chris

citybreaker 15. Mai 2004 11:09

Re: XML-Tutorial
 
Zitat:

Zitat von Nicodius
Ne geht irgendwie nicht :cry:



//Edit: sorry wegen dem doppelpost

Also bei mir klappt es wenn ich es über speichern unter mache. (=

Tillmet 15. Mai 2004 12:27

Re: XML-Tutorial
 
Hi
Also, als erstes, der Download funzt mit Rechtsklick und danke für das Tut, jetzt wüsste ich aber noch gerne, wie du immer diese PDF Dateien machst ^^.

MathiasSimmack 15. Mai 2004 12:48

Re: XML-Tutorial
 
Es gibt bspw. Programme, die richten sich im System als virtueller Drucker ein. Du schreibst dein Zeug, klickst auf Drucken, und es landet in diesem Programm und wird dort als PDF ausgegeben. Einige kosten nix, andere kosten was. Einige bieten nur die blanke Ausgabe als PDF, andere (pdfFactory bspw.) erlauben auch die Gestaltung des Inhaltsverzeichnisses.

Tillmet 15. Mai 2004 13:00

Re: XML-Tutorial
 
Danke, werde mal danach suchen, das mit dem Drucken klingt auch sehr einleuchtend.

Edit: Um keinen unnötigen Post zu machen, trotzdem nochmal danke :mrgreen:

CalganX 15. Mai 2004 14:36

Re: XML-Tutorial
 
Hi,
das Tutorial habe ich mit StarOffice/OpenOffice.org gemacht: http://www.openoffice.org
Seit Version 1.1 kann OOo auch PDF's erzeugen. ;)

Nun aber Schluss mit OT und das Tutorial lesen. :warn: :mrgreen:

Chris

orakel 21. Mai 2004 15:27

Re: XML-Tutorial
 
Hi, irgendwie kann ich den Movieorganiser nicht runterladen!
mach ich was falsch, oder funkt das wirklich nich?

MathiasSimmack 21. Mai 2004 15:54

Re: XML-Tutorial
 
Zitat:

Zitat von orakel
Hi, irgendwie kann ich den Movieorganiser nicht runterladen!
mach ich was falsch, oder funkt das wirklich nich?

Im Bereich "Freeware" müsste ein Beitrag dazu zu finden sein. Wobei aber anzumerken ist, dass die aktuellen Versionen des MO nicht mehr allzu viel mit dem Tutorial zu tun haben. Es gibt zuviele Unterschiede zwischen Tutorial und MO. Wenn du´s dir nur deswegen holst, dann brauchst du starke Nerven ... :mrgreen:

TheMiller 7. Jul 2004 12:30

Re: XML-Tutorial
 
Hi.

habe noch nie was mit XML-Daten gemacht und wollte dein Tut bearbeiten. Finde es nicht schlecht - Ehrlich.

Doch eins macht mir Probleme. Ich habe Typbibliothek importiert (allerdings 5.0) und dann öffnet sich die pas-datei mit 19.000 Zeilen.

Wie kann ich jetzt eine XML-Datei erstellen? Muss ich die Pas wieder schließen, oder offen lassen?

Ist bestimmt ganz simpel aber ich komm da nicht weiter *schähm*

CalganX 7. Jul 2004 12:49

Re: XML-Tutorial
 
Hi,
erstmal wirst du mit XML 5.0 ein paar Probleme bekommen mit dem Tutorial, da sich einige Dinge geändert haben. ;) Außerdem hat nicht jeder MSXML5.0, weil das nur bei Office 2003 bei ist und nicht herunterladbar ist. ;)
Und wegen der Datei: das steht ja alles im Tutorial drin. Schließen und weitermachen. *g*

Chris

PS: Du bist recht weit am Anfang, um nicht zu sagen, dass du gerade erst angefangen hast von daher stehe ich deiner Beurteilung etwas kritisch gegen über. :roll:

TheMiller 7. Jul 2004 14:22

Re: XML-Tutorial
 
So,

bin jetzt schon weiter. Habe die procedure UpdateList erstellt und einen Datensatz in die XML-Datei eingetragen. Doch wenn ich die Prozedur ausführe, dann schreibt er nichts in die ListView, sondern gibt folgende Meldung aus:

Delphi-Quellcode:
Listenindex überschreitet -1
meine Prozedur sieht so aus:

Delphi-Quellcode:
procedure TForm1.UpdateList;
const
  NAMES: array[0..8] of string = ('name', 'format', 'ton',
                                  'anzmedien', 'bildqualität',
                                  'tonqualität', 'gesamt',
                                  'verliehen', 'comment');
var
  movies : IXMLDOMNodeList;
  subnode: IXMLDomNode;
  i, j  : Integer;

begin
  ListView1.Items.Clear;
  ListView1.Items.BeginUpdate;

  movies:=xmlDoc.documentElement.selectNodes('movie');
  for i:=0 to movies.length -1 do begin
    subnode:=movies.item[i].selectSingleNode('id');
    ListView1.Items.Add;
    ListView1.Items[i].Caption:=SubNode.Text;
    with ListView1.Items[i].SubItems do begin
      for j:=0 to length(NAMES[-1]) do begin
        subNode:=movies.item[i].selectSingleNode(NAMES[j]);
        if subNode <> nil then
          Add(SubNode.text)
        else
          Add('');
        end;
      end;
    end;

    ListView1.Items.EndUpdate;
  end;
und meine XML-Datei so:

Delphi-Quellcode:
<?xml version="1.0" encoding="ISO-8859-1"?>
<movieorganizer>
  <movie>
    <id>1</id>
    <name>Der Schuh des Manitu</name>
    <format>DVD</format>
    <ton>DD5.1</ton>
    <anzmedien>2</anzmedien>
    <bildqualität>1+</bildqualität>
    <tonqualität>1</tonqualität>
    <gesamt>1+</gesamt>
    <verliehen></verliehen>
    <comment>Lustige Komödie mit Bully.</comment>
    <screenshot />
  </movie>
</movieorganizer>
Alles streng nach Beispiel.

Doch diese Stelle der Prozedur musst ich von:

Delphi-Quellcode:
for i:=0 to length(NAMES)-1 do begin
in

Delphi-Quellcode:
for j:=0 to length(NAMES[-1]) do begin
ändern, da folgende Comp-Meldung erschien:

Delphi-Quellcode:
[Fehler] Unit1.pas(65): '[' erwartet, aber ')' gefunden.

CalganX 7. Jul 2004 14:33

Re: XML-Tutorial
 
Hi,
ich leite dich mal an diesen Beitrag. ;)

Chris

shareholder 7. Jul 2004 21:11

Re: XML-Tutorial
 
falscher link im 2. beitrag !
der link zur aktuellsten version ist:
http://www.csd-software.net/tutorials/delphi_xml.html

trotsdem danke!!!! ECHT GEIL! :mrgreen:

Nightshade 7. Jul 2004 22:23

Re: XML-Tutorial
 
Zitat:

Zitat von DJ-SPM
[...]
Alles streng nach Beispiel.

Doch diese Stelle der Prozedur musst ich von:

Delphi-Quellcode:
for i:=0 to length(NAMES)-1 do begin
in

Delphi-Quellcode:
for j:=0 to length(NAMES[-1]) do begin
ändern, da folgende Comp-Meldung erschien:

Delphi-Quellcode:
[Fehler] Unit1.pas(65): '[' erwartet, aber ')' gefunden.

Das liegt daran, das
Delphi-Quellcode:
with ListView1.Items[i].SubItems do begin
mittlerweile(??) eine eigene Eigenschaft "NAMES" hat, benenn das Array um in "NAMEN", dann gehts.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 Uhr.
Seite 1 von 3  1 23      

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