AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Benutzerdefinierte Compiler-Warnungen
Thema durchsuchen
Ansicht
Themen-Optionen

Benutzerdefinierte Compiler-Warnungen

Ein Thema von Scurra · begonnen am 30. Jul 2015 · letzter Beitrag vom 6. Aug 2015
Antwort Antwort
Seite 2 von 2     12   
Scurra

Registriert seit: 19. Jan 2015
81 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Benutzerdefinierte Compiler-Warnungen

  Alt 3. Aug 2015, 10:00
Zitat:
Soweit ich sehe unterstützt NativeXML aber kein Xpath, oder irre ich mich?
Dazu kann ich leider noch nichts sagen, da ich XPath gerade zum ersten Mal höre So wie ich das auf die Schnelle gelesen habe, stellt XPath Funktionen bereit, um durch xml-Dokumente zu navigieren. Ist das richtig so?

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
  Mit Zitat antworten Zitat
alda

Registriert seit: 24. Mär 2014
Ort: Karlsruhe
93 Beiträge
 
Delphi XE6 Architect
 
#12

AW: Benutzerdefinierte Compiler-Warnungen

  Alt 3. Aug 2015, 18:45
Zitat:
Soweit ich sehe unterstützt NativeXML aber kein Xpath, oder irre ich mich?
Dazu kann ich leider noch nichts sagen, da ich XPath gerade zum ersten Mal höre So wie ich das auf die Schnelle gelesen habe, stellt XPath Funktionen bereit, um durch xml-Dokumente zu navigieren. Ist das richtig so?
XPath ist eine Querylanguage und hat somit eine entsprechende Syntax zum abfragen von XML Strukturen. Schau Dir dazu einfach mal ein Tutorial an (z.B. w3schools)

Zur Veranschaulichung mal ein kleines Beispiel anhand deines Anwendungsfalls:

Gegeben sei folgende XML Struktur
Code:
<?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>
XPath Query um ..
  • alle Knoten books mit der category "WEB" zu erhalten, allerdings nicht rekursiv (also nur auf bookstore Ebene):
    //bookstore/book[@category="WEB"]
  • alle Knoten books mit der category "WEB" zu erhalten, allerdings rekursiv (somit auch im usedbooks Knoten)
    //bookstore//book[@category="WEB"]
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Benutzerdefinierte Compiler-Warnungen

  Alt 3. Aug 2015, 19:00
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?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#14

AW: Benutzerdefinierte Compiler-Warnungen

  Alt 4. Aug 2015, 07:11
Tippfehler: Statt property NewBookes: TList<TBook>; lieber property NewBooks: TList<TBook>; .

  Mit Zitat antworten Zitat
Scurra

Registriert seit: 19. Jan 2015
81 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: Benutzerdefinierte Compiler-Warnungen

  Alt 4. Aug 2015, 07:25
@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:
Nur so vom Anschauen: Was ist deiner Meinung nach schneller (und sogar noch einfacher) in der Verarbeitung?
Ich gehe mal davon aus, dass es eine rethorische Frage ist, denn so sieht dein Code natürlich schneller aus. Allerdings ist dein Code weniger allgemein. Wenn man nun ein anderes xml-Dokument hätte, dann müsste/sollte man andere Klassen bauen. Ich würde es folgendermaßen aufbauen:

Delphi-Quellcode:
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;
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.

@Dejan Vu: Ich habe den Tippfehler überlesen

Geändert von Scurra ( 4. Aug 2015 um 08:01 Uhr)
  Mit Zitat antworten Zitat
alda

Registriert seit: 24. Mär 2014
Ort: Karlsruhe
93 Beiträge
 
Delphi XE6 Architect
 
#16

AW: Benutzerdefinierte Compiler-Warnungen

  Alt 4. Aug 2015, 18:41
@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?
Zur tatsächlichen Geschwindigkeit kann ich nichts sagen, da ich das bisher nie evaluieren musste (bisher gab es keine Notwendigkeit dafür). Ich persönlich verwende dafür auch immer die Winapi.Msxml Implementierung. Das müsstest Du dann für deinen Anwendungsfall evaluieren bzw einfach mal debuggen, wo bei NativeXML ide Zeit verloren geht und warum.

Ich gehe mal davon aus, dass es eine rethorische Frage ist, denn so sieht dein Code natürlich schneller aus. Allerdings ist dein Code weniger allgemein. Wenn man nun ein anderes xml-Dokument hätte, dann müsste/sollte man andere Klassen bauen.
Logisch, wenn sich das korrespondierende XML ändert, muss sich natürlich auch die Zugriffsklasse ändern.

Ich würde es folgendermaßen aufbauen:

Delphi-Quellcode:
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;
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.
Diese Ansatz wäre allerdings wieder allgemein und "untypisiert" (das macht ja schon jede XML-Lib so oder ähnlich). Das Beispiel von Sir Rufo ist typisiert auf die von dir verwendete XML-Struktur und ermöglicht dir einen objektorientierten Umgang mit den Daten in Form von Klassen und Objekten - man sieht also von Außen z.B. garnicht, dass diese Daten am Ende in einem XML landen. Vielleicht übersehe ich aber auch nur etwas in deinem Beispiel
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

AW: Benutzerdefinierte Compiler-Warnungen

  Alt 4. Aug 2015, 20:38
@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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Scurra

Registriert seit: 19. Jan 2015
81 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: Benutzerdefinierte Compiler-Warnungen

  Alt 6. Aug 2015, 07:30
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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
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