![]() |
AW: Benutzerdefinierte Compiler-Warnungen
Zitat:
Zitat:
Aber mir fällt auch gerade auf, dass wir durch diese xml-Geschichte vom eigentlichen Thema abkommen ;) |
AW: Benutzerdefinierte Compiler-Warnungen
Zitat:
![]() ![]() Zur Veranschaulichung mal ein kleines Beispiel anhand deines Anwendungsfalls: Gegeben sei folgende XML Struktur
Code:
XPath Query um ..
<?xml version="1.0" encoding="UTF-8"?>
<bookstore> <book category="COOKING"/> <book category="CHILDREN"/> <book category="WEB"/> <book category="WEB"/> <usedbooks> <book category="WEB"/> <book category="COOKING"/> <book category="MISC"/> </usedbooks> </bookstore>
|
AW: Benutzerdefinierte Compiler-Warnungen
Zitat:
Egal, wie und was, mit ein paar leichtgewichtigen Klassen kannst du die Struktur wesentlich einfacher abbilden und musst nicht den ganzen XML-Ballast mit dir herumschleppen. Statt dich hier durchzukämpfen um ein Buch anzuhängen:
XML-Code:
erstellst du dir (hier zwei) Klassen um die benötigte Struktur abzubilden:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore> <newbooks> <book category="COOKING"/> <book category="CHILDREN"/> <book category="WEB"/> <book category="WEB"/> </newbooks> <usedbooks> <book category="WEB"/> <book category="COOKING"/> <book category="MISC"/> </usedbooks> </bookstore>
Delphi-Quellcode:
Und dann hast du einen Serializer/Desrializer, der dann beim Import/Export zu Tragen kommt:
TBook = class
property Category: string; end; TBookstore = class property NewBookes: TList<TBook>; property UsedBooks: TList<TBook>; end;
Delphi-Quellcode:
Nur so vom Anschauen: Was ist deiner Meinung nach schneller (und sogar noch einfacher) in der Verarbeitung?
// Holen
LBookstore := TXmlSerializer.Deserialize<TBookstore>( XmlData ); // Wildeste Verarbeitungen durchführen LBookstore.NewBooks.Add( TBook.Create() ); // Und so bekommen wir das wieder in eine XML-Datei TXmlSerializer.Serialize( LBookstore, XmlData ); |
AW: Benutzerdefinierte Compiler-Warnungen
Tippfehler: Statt
Delphi-Quellcode:
lieber
property NewBookes: TList<TBook>;
Delphi-Quellcode:
.
property NewBooks: TList<TBook>;
;-) |
AW: Benutzerdefinierte Compiler-Warnungen
@alda: Danke für die kurze Einführung. Es hat noch etwas gedauert, bis ich verstanden habe, in welcher Weise man die Such-Anweisungen in den Delphi-Code einbinden muss. Sind die Anfragen mit XPath denn im Allgemeinen schneller als mit (den meisten) anderen Xml-Parsern wie z. B. TXmlDocument?
Zitat:
Delphi-Quellcode:
Man müsste dann eben noch Properties zu den Feldern ergänzen und Methoden zum Durchsuchen anbieten. Der Code soll jetzt ja auch nur meine Idee darstellen. In LoadFromFile müsste dann der Wurzel-Knoten inkl. aller Childnodes etc. eingelesen werden. Wenn man es sich ganz einfach machen möchte, verwendet man hier einfach einen bereits vorhandenen Parser (wie z. B. NativeXml, TXmlDocument o. ä.) und liest dann lediglich alle Daten in "meine" Struktur ein.
TXmlNode = class
private FText: string; FAttributes: TDictionary<string, string>; FChildNodes: TList<TXmlNode>; ... end; TXmlDoc = class private FRoot: TXmlNode public LoadFromFile(aFileName: string); SaveToFile(aFileName: string); end; @Dejan Vu: Ich habe den Tippfehler überlesen ;) |
AW: Benutzerdefinierte Compiler-Warnungen
Zitat:
Zitat:
Zitat:
|
AW: Benutzerdefinierte Compiler-Warnungen
@Scurra
Natürlich ist mein Code nicht mehr allgemein, sondern eben speziell. Wenn du aber eine Anwendung schreibst, die in einer XML-Datei bestimmte Strukturen erwartet, kannst du dann jede allgemeine XML-Datei verwenden oder auch nur spezielle? Wenn ich eine Kokosnuss essen möchte, dann kann ich mir a) Zähne und Kiefer aus Titan einbauen lassen und kann dann sogar zum Nachtisch an einem T-Träger knabbern - wie praktisch oder b) mit geeignetem Hilfsmittel (z.B. Hammer) die Kokosnuss in eine leicht zu konsumierende Form umwandeln Was ich weder bei a) oder b) hinbekomme ist natürlich der umgekehrte Weg zurück zur Kokosnuss. |
AW: Benutzerdefinierte Compiler-Warnungen
Ok, ich habe es vorher wohl falsch verstanden. Ich dachte, dass man durch solch eine Struktur, wie ich sie in meinem letzten Beitrag beschrieben habe, schneller arbeiten kann, als wenn man sich ein xml-Dokument nur z. B. mittels TXmlDocument im Speicher hält. Im Nachhinein denke ich, dass ich vllt. etwas naiv war, denn wenn man es so schneller implementieren könnte, dann hätte es sicherlich schon jemand gemacht ;)
Jetzt habe ich aber die Idee verstanden, Strukturen zu verwenden, die speziell auf bestimmte xml-Dateien zugeschnitten sind, zu verwenden, um sich dadurch Zeit zu sparen. Wieder etwas dazu gelernt :) Danke euch beiden! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz