Ok, wenn man über das XMLDocument1.DOMDocument zugreift, kann man XPath nutzen:
Delphi-Quellcode:
XPath: String;
...
//XPath := '//Panels/Panel[@id="P' + IntToStr(P.Tag) + '"]';
XPath := '*/Panel[@id="P' + IntToStr(P.Tag) + '"]';
P.Caption := (XMLDocument1.DOMDocument as IDOMNodeSelect).selectNode(XPath + '/caption').childNodes[0].nodeValue;
P.Left := StrToIntDef((XMLDocument1.DOMDocument as IDOMNodeSelect).selectNode(XPath + '/left').childNodes[0].nodeValue, 0);
P.Top := StrToIntDef((XMLDocument1.DOMDocument as IDOMNodeSelect).selectNode(XPath + '/top').childNodes[0].nodeValue, 0);
Das kann man ja über eigene Funktionen für den Zugriff (lesen/schreiben) auch noch vereinfachen.
Recht verwirrend sind für den Anfang die Unterschiede von DOMNode und XMLNode etc.
Bei DOMNode gibt es z.B. keine Eigenschaft "Text", statt dessen muss man (m.E.) "childNodes[0].nodeValue" verwenden.
Aber es geht ja letztlich.
Jetzt ist die Frage, ob ein Zugriff über "normale Knoten" oder über die "Experten-Schnittstellen" sinnvoller ist.
Jelly hat
hier einmal die Schnittstellennutzung sehr gelobt - ob´s noch gilt?
Wie benutzt Ihr
XML-Dateien?
Den Vorteil, dass man alle mögliche Schweinereien speichern kann, ohne an starre Strukturen (wie einer
SQL-Datenbank) gebunden zu sein, finde ich sehr interessant.
Die Experten-Schnittstellen setzen dabei vielleicht wieder eher Grenzen!?
Ich will einmal meine eigenen Datenkomponenten (bisher Firebird) auf
XML anpassen. Das sieht etwa so aus:
TxmlEdit von TEdit abgeleitet.
Zusätzliche Eigenschaften: XPath und ID
Zusätzliche Methoden: ReadValue, WriteValue
Wird ein xmlEdit angezeigt (Paint), holt sich die Komponente zuvor "schnell noch" mit ReadValue den aktuellen Wert aus der
XML-Datei.
Ändert der Nutzer den Text wird der neue Text sofort mit WriteValue in die
XML-Datei geschrieben (dadurch werden andere xmlEdit´s auch gleich veranlasst, sich mal neu zu zeichnen (Invalidate)).
Durch Zuweisung von XPath und ID kann jede xmlEdit einen bestimmten "Datensatz" und "Feld" in der
XML-Datei repräsentieren (also z.B. Vornamen der Person mit ID='123' oder Nachnamen der Person mit ID='456').
Alle Standardkomponenten lassen sich als
xml-Variante ableiten. So kann z.B. ein xmlPanel oder xmlLabel zur Anzeige von Einträgen verwendet werden.
Entsprechende Komponenten habe ich bisher für Firebird benutzt (ging einwandfrei) und will das mal auf
XML umstellen...
- Erfinde ich das
Rad neu?
- Habt Ihr Interesse daran?