Zitat:
Dein Chef hat Recht. Wenn du nicht gerade ein
XML-Validierungs-Import-Export-Programm schreibst, dann gehört der Umgang mit den
XML-Dateien an den Rand der Anwendung und nicht in den Kern (obwohl, selbst dann sogar
)
Na ja, ich ging bisher immer davon aus, dass ein
xml-Parser nichts anderes macht, als den Inhalt eines
xml-Dokuments in sein eigenes Speichermodell (wie auch immer das aussehen mag) liest. Wenn ich mir selbst einen Parser schreiben würde, dann würde ich das zumindest auf diese Weise machen, d. h. die .xml-Datei wie als Text-Datei betrachten und mir die Knoten, die Struktur usw. mit Listen o. ä. in den Speicher einlesen (mit einer Methode wie LoadFromFile) und wenn ich dann mit Methoden wie "GetNode(Integer)" o. ä. würde ich dann in meinem Speichermodell operieren. Insofern ist mir nicht ganz klar, warum das Arbeiten direkt mit
xml-Dateien/
xml-Dokumenten langsamer sein soll.
Aber mir fällt auch gerade auf, dass wir durch diese
xml-Geschichte vom eigentlichen Thema abkommen
Es ist nicht gesagt, dass der alles im Speicher halten muss, kann ja. Um das herauszufinden, müsstest du dir die Implementierung ansehen.
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:
<?
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>
erstellst du dir (hier zwei) Klassen um die benötigte Struktur abzubilden:
Delphi-Quellcode:
TBook = class
property Category: string;
end;
TBookstore = class
property NewBookes: TList<TBook>;
property UsedBooks: TList<TBook>;
end;
Und dann hast du einen Serializer/Desrializer, der dann beim Import/Export zu Tragen kommt:
Delphi-Quellcode:
// 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 );
Nur so vom Anschauen: Was ist deiner Meinung nach schneller (und sogar noch einfacher) in der Verarbeitung?