Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   TXmlNode statt IXmlNode? (https://www.delphipraxis.net/153935-txmlnode-statt-ixmlnode.html)

stahli 20. Aug 2010 17:53

TXmlNode statt IXmlNode?
 
Nochmal eine grundsätzliche Frage:

Der XML-Datenbingungs-Experte erzeugt ja Listen von Interfaces mit eigenen propertys. Im Grunde lassen dies sich ja auch schon ganz gut benutzen.

Allerdings kann man die Interfaces nicht so einfach in eine T(Object)List kopieren und dort z.B. umsortieren. Daher wäre eine Arbeit mit richtigen Objekten (Klassen) auch überlegenswert.

Wie regelt Ihr solche Zugriffe über eigene Klassen? Und wie bekommt man dann einen Zugriff auf die jeweiligen Knoten?

Also wie macht man´s, ohne den Experten zu nutzen?
Anhand der Knotennamen müssten dann wohl die passenden Objekte erzeugt werden.

Hat mal jemand ein Beispiel? Ich würde in meinem Projekt gern direkt mit Objekten anstatt mit Interfaces arbeiten.

Namenloser 20. Aug 2010 17:57

AW: TXmlNode statt IXmlNode?
 
Es gibt doch auch eine TInterfaceList :gruebel:

stahli 20. Aug 2010 19:29

AW: TXmlNode statt IXmlNode?
 
Ja, aber die bietet nicht die Möglichkeiten, wie eine TList. Z.B. die Sort-Funktion.

Ich werde mal Komponenten erstellen und durchtesten, die jeweils eine IXmlNode als Schnittstelle auf einen bestimmten Knoten erhalten und dann über bestimmte Eigenschaften (je nach Klasse) und deren Getter und Setter auf die "Knotendaten" zugreifen. Dann kann man auch z.B. ReadBool u.ä. erstellen, die intern die Konteneigenschaft .Text verwenden und so Probleme durch leere oder nicht existierende Knoten vermeiden.

Listenkomponenten erhalten zusätzlich die Möglichkeit, in einer TComponentList weitere Subkomponenten zu verwalten.

Nach dem Laden einer XML-Datei müssten dann vom Wurzelknoten ausgehend alle notwendigen Komponenten einmal erzeugt werden (die genaue Klasse dann abhängig vom Knotennamen), und jeder so erzeugten Komponente wird dann der eigentliche Knoten zugewiesen, in dem alle Daten sind und auch bleiben.

So hätte man die XML-Struktur in "richtigen Klassen" bzw. Objekten abgebildet. Änderungen in den Objekten (z.B. MyObjekt.Delete) werden dann eben auch an die eigentlichen Knoten weiter gegeben.

Ich werde das mal so antesten.


Man kann zwar dann den XML-Experten nicht mehr nutzen, hat dafür aber (wenn das so klappt) bessere Kontrolle über die eigenen Daten. Und die XML-Struktur ergibt sich dann nur aus den erstellten Komponenten. Man muss also nicht zuvor eine XML oder XSD anlegen und analysieren (lassen).
Fehlende, oder überflüsse Daten in einer XML-Datei sind bei einer solchen Herangehensweise dann nicht störend.

himitsu 20. Aug 2010 20:31

AW: TXmlNode statt IXmlNode?
 
Und die generische Liste?
Delphi-Quellcode:
TList<IXMLNode>


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf