Autor |
Beitrag |
Yogu
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 24.07.08 20:16
XML - Lesen, Ändern, Schreiben
Version 1.0
Beschreibung
Mit dieser Unit können XML-Daten in einen übersichtlichen Baum gelesen, dort durch verschiedene Methoden bearbeitet und schließlich auch wieder gespeichert werden. Als Lesequellen und Speicherziele werden Streams, Dateien, Ressourcen, Strings und die Zwischenablage unterstützt.
Parser-Fehlermeldungen
Der Parser ist sehr "streng", es werden viele Fehlermeldungen ausgelöst. Diese sind Variablen, sie können also während der Laufzeit übersetzt werden. Außerdem wird beim Lesen und Schreiben eine Quelle gespeichert, die bei Fehlern mit angegeben ist. Außerdem können alle Exceptions des Parsers unterdrückt und durch eine Eigenschaft ausgelesen werden.
CDATA
Der Parser lässt keinen einfachen Text zu - ausgenommen, er wird durch CDATA-Begrenzer markiert. Diese CDATA-Teile werden in einen String geschrieben.
Kommentar
Wahrscheinlich gibt es schon viele solcher Units. Ich habe sie mir irgendwann einmal zusammgebastelt, weil ich eine brauchte. Jetzt habe ich sie wiederentdeckt, noch ein bisschen verbessert und kommentiert. Kommentare sind nur im Interface-Teil vorhanden, wenn Fragen zum Quelltext auftreten, beantworte ich sie gerne. Ich denke, die Handhabung dürfte ganz einfach sein, ich will jedoch trotzdem ein kleines Beispiel zur Verwendung zeigen:
Verwendung
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| var Document: TXMLDocument; Tag: TXMLTag; begin Document := TXMLDocument.Create; try Document.LoadFromFile('Datei.xml');
Tag := fXMLDocument.GetTag('eigenschaften', True);
Titel := Tag.Attributes.Values['titel']; Autor := Tag.Attributes.Values['autor']; Anzahl := StrToInt(Tag.Attributes.Values['anzahl']);
Anzahl := Anzahl + 1;
Tag.Attributes.Values['anzahl'] := IntToStr(Anzahl);
Document.SaveToFile('Datei.xml'); finally Document.Free; end; end; |
Das war jetzt bei weitem keine komplette Funktionsübersicht, aber als Einstieg sollte es genügen. Außerdem denke ich, dass die Methoden selbsterklärend benannt sind.
Versionsgeschichte
Version 1.0
Größe: 25 KB
Datum: 24. Juli 2008
Changelog:
(Erste Version)
Download
Download
Per Yogularm-Mirror
[url= www.yogularm.de/files/XML.pas][/url]
Per Anhang
Einloggen, um Attachments anzusehen!
|
|
Martin1966
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Do 07.08.08 10:17
Hallo!
Da sieht doch schon recht gut aus. Und das gute dran: So eine Unit kann ich bald recht gut gebrauchen.
Gut finde ich, dass ich mit ein und der selben Klasse nicht nur XML Daten einlesen sondern auch wieder ausgeben kann! Super!
Sollte ich Fehler oder sonstige Bemerkungen haben werde ich mich natürlich melden!!!!
Lg, Martin
_________________ Ein Nutzer der Ecke
|
|
Martok
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Do 07.08.08 18:03
Sieht vom drübergucken her ganz nett aus. Zumindest die Fehlermeldungen machen es schonmal vielseitiger als meinen.
So wie ich das sehe fehlen aber Kommentare(<!-- -->) und damit Zusammenhängend <! > -Knoten (z.B. DOCTYPE), oder?
Hast du eventuell Geschwindigkeitsschätzungen? Ist nur n Gefühl, aber irgendwas sieht bei dir langsam aus... relativ komplex halt.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Yogu
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 21.08.08 14:51
Schön, da kommt man gerade aus dem Urlaub, und es gibt neues Feedback.
Martin1966 hat folgendes geschrieben: | Da sieht doch schon recht gut aus. Und das gute dran: So eine Unit kann ich bald recht gut gebrauchen. |
Das freut mich.
Martin1966 hat folgendes geschrieben: | Sollte ich Fehler oder sonstige Bemerkungen haben werde ich mich natürlich melden!!!! |
Mach das!
Martok hat folgendes geschrieben: | So wie ich das sehe fehlen aber Kommentare(<!-- -->) und damit Zusammenhängend <! > -Knoten (z.B. DOCTYPE), oder? |
Ja, Kommentare fehlen noch. Das liegt daran, dass ich die Unit eigentlich nur zum Speichern von Daten verwende, die normalerweise nicht manuell bearbeitet werden. Kommentare waren deshalb noch nicht notwendig. Wenn ich mal etwas Zeit und Lust habe, werde ich sie natürlich noch einbauen. DOCTYPE-Anweisungen sind auch nicht möglich. Nur <?xml ... ?> wird einfach ignoriert.
Martok hat folgendes geschrieben: | Hast du eventuell Geschwindigkeitsschätzungen? Ist nur n Gefühl, aber irgendwas sieht bei dir langsam aus... relativ komplex halt. |
Bei normal großen Dateien merkt man den Ladevorgang eigentlich so gut wie nicht - sind nur ein paar Millisekunden. Komplexe SVG-Dateien könnten schon etwas Zeit benötigen, ich habe das aber noch nicht getestet. Ich gebe es ja zu, die Schleife sieht ziemlich kompliziert aus, aber das meiste sind nur Fehlermeldungen, die im Normalfall sowieso nicht ausgeführt werden müssen.
Danke an euch beide, ich bin offen für weitere Kommentare
|
|
tekkyeah
Hält's aus hier
Beiträge: 7
|
Verfasst: Mi 29.10.08 21:10
Hallo,
beim ersten Test erhalte ich leider schon eine Fehlermeldung.
"Fehler beim Parsen von Datei '1225216354593.xml' (Zeile 1, Zeichen 62): Bezeichner erwartet, aber '=' gefunden.
Die XML-Datei sieht so gut aus, wird von einem Shop erstellt und lässt sich problemlos mit dem IE darstellen.
Gruß
Holger
|
|
Yogu
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 29.10.08 21:46
tekkyeah hat folgendes geschrieben : | beim ersten Test erhalte ich leider schon eine Fehlermeldung.
"Fehler beim Parsen von Datei '1225216354593.xml' (Zeile 1, Zeichen 62): Bezeichner erwartet, aber '=' gefunden. |
Ohne die XML-Datei kann ich leider nicht feststellen, wo der Fehler liegt
tekkyeah hat folgendes geschrieben : | Die XML-Datei sieht so gut aus, wird von einem Shop erstellt und lässt sich problemlos mit dem IE darstellen. |
Mein Parser ist ziemlich "streng", das heißt es wird viel als Fehler angesehen, was von anderen Parsern vielleicht noch durchgeht. Aber poste doch einfach mal die Zeile 1 deiner Datei.
Danke fürs Testen!
Grüße,
Yogu
|
|
kkausp
Beiträge: 77
Erhaltene Danke: 1
W2K, WIN XP, WIN XPe; WIN7
(D1;D2;D5;) D6 Ent.; D2009 Ent.
|
Verfasst: Fr 13.02.09 16:38
hallo,
wie sieht es mit Delphi 2009 aus, compilieren geht, aber beim parsen sieht Text in TXMLDocument.Read(const Text, Source: String); sehr merkwürdig aus.
|
|
Yogu
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Fr 13.02.09 17:30
kkausp hat folgendes geschrieben : | wie sieht es mit Delphi 2009 aus, compilieren geht, aber beim parsen sieht Text in TXMLDocument.Read(const Text, Source: String); sehr merkwürdig aus. |
Hallo,
meinst du damit diese Funktion:
Delphi-Quelltext 621: 622: 623: 624: 625: 626: 627: 628: 629: 630:
| { ... } procedure TXMLDocument.LoadFromStream(Stream: TStream; const Name: String = ''); var S, Source: String; begin Assert(Assigned(Stream));
SetLength(S, Stream.Size); Stream.Read(PChar(S)^, Length(S)); if Name <> '' then Source := Name else Source := XMLName_Unknown; Read(S, Source); end; |
Entspricht dort S nach Zeile 627 nicht dem Dateiinhalt?
Vielleicht ist die Konstruktion PChar(S)^ daran schuld - sie tut bei mir zwar, aber es sieht trotzdem recht seltsam aus. Probier mal stattdessen Pointer(S)^ aus.
Grüße,
Yogu
|
|
|