![]() |
Datenbank: XML • Zugriff über: ClientDataSet
ClientDataSet
Hallo zusammen,
ich bräuchte mal wieder ein Tipp von euch. Ich will eine XML Datei in ein Grid einlesen, um später ein Report mit Rave zu realisieren. Jetzt bin ich bisher noch auf keine bessere Idee gekommen, als die XML Datei mit einem ClientDataSet einzulesen. Nun habe ich aber das Problem mit der Tabellenstruktur. Da jedes XML File anders ist, falle ich immer wieder auf die Nase. Besteht die Möglichkeit, die Struktur zur Laufzeit zu definieren ? bzw die Struktur aus der bestehenden XML Datei auszulesen? Danke im Voraus. |
Re: ClientDataSet
Du kannst die Struktur so erstellen wie Du sie brauchst. Beispiel:
(aus dem Zusammenhabg gerissener Beispielcode:)
Delphi-Quellcode:
[...] cds := tClientDataSet.Create(self); cds.FieldDefs.Add('DIR',ftString,65); cds.FieldDefs.Add('Unit',ftString,25); cds.FieldDefs.Add('LastTest',ftDateTime); cds.FieldDefs.Add('Result',ftInteger); cds.FieldDefs.Add('comment',ftString,250); cds.FieldDefs.Add('Durance',ftString,50); cds.CreateDataSet; cds.SaveToFile(sTableName,dfxml); cds.free; |
Re: ClientDataSet
Ja, ok danke. Das habe ich zwischenzeitlich auch gefunden.
Jetzt fehlt mir nur noch die Idee, wie ich aus einer bestehenden XML Datei die "Struktur" aus lesen kann. |
Re: ClientDataSet
Zitat:
================ anzeigen lassen Ansonsten sind einfach strukturierte XML auch mit einem ASCII-Editor mehr oder weniger Selbsterklaerend |
Re: ClientDataSet
Zitat:
TClientDataset + TDataSource + Grid ist klar. Nur will das TClientDataSet eine feste Struktur bevor ich die XML Datei öffnen kann. Und da sich die XML Datei ändert kann ich die Struktur nicht fix im ClientDataSet hinterlegen. |
Re: ClientDataSet
dann geh das XML-File doch erstmal mit einer Schleife durch und schau was für eine Struktur dein TClientDataSet
haben muss. so mache ich das z.B.
Delphi-Quellcode:
nur als Beispiel, eben von Hand geschrieben...
for i:=0 to XML.ChildNodes.Count-1 do
begin for j:=0 to XML.ChildNodes[i].ChildNodes.Count-1 do begin eNode:=XML.ChildNodes[i].ChildNodes[j]; if eNode.NodeName='equipment' then begin for k:=0 to eNode.ChildNodes.Count-1 do begin if eNode.ChildNodes[k].NodeName='elements' then begin for m:=0 to eNode.ChildNodes[k].ChildNodes.count-1 do begin mNode:=eNode.ChildNodes[k].ChildNodes[m]; for n:=0 to mNode.ChildNodes.count-1 do begin if mNode.ChildNodes[n].NodeName='subsystem' then begin end; end; end; end; end; end; end; end; Auf jeden Fall weißt du dann was für Spalten du brauchst. Gruß Ruben |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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