![]() |
Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen?
Hallo,
hat hier eventuell schon mal jemand DB-Daten (physikalische Sicht) ausgegeben in XML (DOM), wobei die Daten über eine Schema-definiton (logische Sicht, nicht DTD! sonder XSD) umgemapped wurden. Wichtig ist dabei vor allen Dingen das die DB-Coder nicht unbedingt Code schreiben sollen für jedes XML-Output sondern das man es mit Hilfe des Schemas eventuell mit Mappingkomponenten erledigen kann. Ich habe damit vor das Reporting mit Crystal Report von der Datenbanksicht (auch Views wären zu komplex) zu entkoppeln und in ein logische Modell per Schema zurück zu transformieren um dann einen Reportserver mit der XML-Datenquelle zu füttern. Das Reportdesign läuft ebenfalls mit dem Schema ab. Vieleicht hat sich ja schon jemand mal damit beschäftigt oder weiss ein paar Informationsquellen zu diesem Thema. Ich habe das hier erstmal allgemein gehalten um erstmal zu sehen ob überhaupt ein Response kommt. bin dankbar für jeden Response :D Reiner |
Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen
Hallo Reiner.
erst mal Herzlich willkommen in der DP. (auch wenn das Herzlich willkommen ein paar Monate zu spät kommt) Ich habe eine ähnliche Frage in der Rubrik XML gestellt. http://www.delphipraxis.net/images/common/icon_dp.gif ![]() Evtl. antwortet ja jemand, dann hast Du ja indirekt auch eine Antwort. Hast Du vielleicht selbst eine Lösung gefunden? In Delphi 7 gibt es einige Komponenten mit denen man das machen können sollte. (xmlmapper.exe, TXMLTransform, TXML...) Ich bin da aber noch nicht ganz durchgestiegen. |
Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen
Wenn es sich speziell um Datenbanktabellen handelt, bietet sich die Klasse
TCLientDataSet an. Diese kann Tabellenartige Strukturen sehr komfortabel in XML-Dateien speichern. Wenn Du ein Codebeispiel dazu brauchst einfach nochmal "bescheid" sagen. |
Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen
Zitat:
|
Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen
Nehmen wir an Du hast eine Tabelle mit den Spalten
ID (Integer), Status (String), Created (TDateTime) und Volume (Real) Das musst Du erst mal dem ClientDataSet sagen:
Delphi-Quellcode:
Nun ist das ClientDataSet quasi bereit (strukturiert) Daten aufzunehmen:
var
ClientDataSet: TClientDataSet; begin ClientDataSet:= TClientDataSet.Create(NIL); // Felder definieren ClientDataSet.FieldDefs.Add('ID', ftInteger, 0, FALSE); ClientDataSet.FieldDefs.Add('Status', ftString, 15, FALSE); ClientDataSet.FieldDefs.Add('Created', ftDate, 0, FALSE); ClientDataSet.FieldDefs.Add('Volume', ftFloat, 0, FALSE); // Dataset aktvieren ClientDataSet.CreateDataset; ClientDataSet.Open;
Delphi-Quellcode:
Hast Du alle Daten eingepflegt kannst Du alles speichern:
ClientDataSet.Append;
ClientDataSet.FieldByName('ID').AsInteger := 1; ClientDataSet.FieldByName('Status').AsString := 'Mein Status'; ClientDataSet.FieldByName('Created').AsDateTime := Date(); // Heute ClientDataSet.FieldByName('Volume').AsFloat := 9.345; ClientDataSet.Post;
Delphi-Quellcode:
Wenn Du Dir die erzeugte Datei anschaust wirst Du feststellen, dass es sich dabei um eine XML-Datei handelt.
ClientDataSet.SaveToFile('D:\TestXmlDataSet.xml', dfXMLUTF8);
// oder ClientDataSet.SaveToFile('D:\TestXmlDataSet.xml'); Lesen geht dann auch ganz einfach:
Delphi-Quellcode:
var
myInt: Integer; myDate: TDateTime; myString: string; myFloat: Currency; ClientDataSet.LoadFromFile('D:\TestXmlDataSet.xml'); ClientDataSet.First; while not ClientDataSet.EOF do begin myInt:= ClientDataSet.FieldByName('Id').AsInteger; myDate:= ClientDataSet.FieldByName('Status').AsString; myString:= ClientDataSet.FieldByName('Created').AsDateTime; myFloat:= ClientDataSet.FieldByName('Volume').AsFloat; ClientDataSet.Next; end; |
Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen
Zitat:
Ich bräuchte aber ein anderes XML Format: Das benötigte Format ist in einer *.xsd Datei festgelegt. Bei Dein Beispiel würde "meine" XML Datei z.B. so aussehen:
Code:
Die passende *.xsd Datei zu Deinem Dataset könnte z.B. so aussehen:
<?xml version="1.0"?>
<Dokument> <ROW> <ID>1</ID> <Status>Mein Status</Status> <Created>07.10.2004 11:02:17</Created> <Volume>9,345</Volume> </ROW> <ROW> <ID>2</ID> <Status>Noch ein Status</Status> <Created>07.10.2004 11:03:27</Created> <Volume>3,14</Volume> </ROW> </Dokument>
Code:
Die *.xsd Datei habe ich mir vom XML Mapper aus Delphi 7 Enterprise erstellen lassen.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Dokument" type="DokumentType"/> <xs:complexType name="DokumentType"> <xs:sequence> <xs:element name="ROW" type="ROWType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:element name="ROW" type="ROWType"/> <xs:complexType name="ROWType"> <xs:sequence> <xs:element name="ID" type="IDType"/> <xs:element name="Status" type="StatusType"/> <xs:element name="Created" type="CreatedType"/> <xs:element name="Volume" type="VolumeType"/> </xs:sequence> </xs:complexType> <xs:element name="ID" type="IDType"/> <xs:simpleType name="IDType"> <xs:restriction base="xs:integer"/> </xs:simpleType> <xs:element name="Status" type="StatusType"/> <xs:simpleType name="StatusType"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:element name="Created" type="CreatedType"/> <xs:simpleType name="CreatedType"> <xs:restriction base="xs:timeInstant"/> </xs:simpleType> <xs:element name="Volume" type="VolumeType"/> <xs:simpleType name="VolumeType"> <xs:restriction base="xs:float"/> </xs:simpleType> </xs:schema> Irgend eine Idee?
Danke nochmal für die Antwort. [edit] Nachtrag: Zitat:
[/edit] |
Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen
Wenn Du unbedingt die von Dir angedeutete XML-Struktur haben möchest,
dann kannst Du auch mit dem ClientDataSet nix anfangen. :( Da sehe ich dann keine andere Möglichkeit als die xsd-Datei (und Deine Datendatei) zu parsen und denn entsprechend mit XMLDom oder so was die XML-Datei zu basteln. Viel Spass ... :drunken: |
Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen
Zitat:
Wozu bräuchte man denn sonst den XML Mapper oder TXMLTransform, ... Es will nur nicht klappen bei mir. Hier habe ich auch noch was interesanntes zu dem Thema gefunden. (Setzt aber eine XML Datei in der zu benuzenden Struktur voraus) ![]() Zitat:
In Delphi sollte das auch ohne Probleme (und ohne viel Aufwand) zu realisieren sein. |
Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen
Hallo ihr lieben,
entschuldigt, wenn ich diesen alten thread nochmal ausgrabe, aber kann es sein, dass die unten dargestellte Funktion nicht korrekt arbeitet? Zitat:
XML-Code:
[/quote="schlock"]<ROWsections RowState="5"> <sectionProducts> </sectionProducts> LINK_FIELD="11" </ROWsections> <ROWsections RowState="5"> <sectionProducts> </sectionProducts> LINK_FIELD="12" </ROWsections> <ROWsections RowState="5"> <sectionProducts> </sectionProducts> LINK_FIELD="13" </ROWsections>
Delphi-Quellcode:
[/quote]
ClientDataSet.LoadFromFile('D:\TestXmlDataSet.xml');
... liefert dann "Mismatch in DataPacket" Kann es sein, dass ich etwas vergessen hab, oder liegt es daran, dass mein ClientDataSet in 3 Ebenen "genested" ist? Mit "dfBinary" geht's problemlos, allerdings wäre mir eine "menschenlesbare" Version der Daten irgendwie lieber. :) Vielen Dank schon mal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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 by Thomas Breitkreuz