AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen?
Thema durchsuchen
Ansicht
Themen-Optionen

Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen?

Ein Thema von Reiner · begonnen am 28. Jul 2003 · letzter Beitrag vom 25. Nov 2009
Antwort Antwort
Reiner

Registriert seit: 25. Jul 2003
1 Beiträge
 
Delphi 7 Enterprise
 
#1

Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen?

  Alt 28. Jul 2003, 14:42
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

Reiner
Ich hoffe euch gehts allen gut.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.838 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen

  Alt 7. Okt 2004, 09:25
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.
Aus Datenbank mit Hilfe einer XSD-Datei eine XML-Datei erstellen.
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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
schlock

Registriert seit: 3. Sep 2004
20 Beiträge
 
#3

Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen

  Alt 7. Okt 2004, 10:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.838 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen

  Alt 7. Okt 2004, 10:26
Zitat von schlock:
Wenn Du ein Codebeispiel dazu brauchst einfach nochmal "bescheid" sagen.
Bescheid.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
schlock

Registriert seit: 3. Sep 2004
20 Beiträge
 
#5

Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen

  Alt 7. Okt 2004, 10:49
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:
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;
Nun ist das ClientDataSet quasi bereit (strukturiert) Daten aufzunehmen:

Delphi-Quellcode:
  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;
Hast Du alle Daten eingepflegt kannst Du alles speichern:

Delphi-Quellcode:
  ClientDataSet.SaveToFile('D:\TestXmlDataSet.xml', dfXMLUTF8);
// oder ClientDataSet.SaveToFile('D:\TestXmlDataSet.xml');
Wenn Du Dir die erzeugte Datei anschaust wirst Du feststellen, dass es sich dabei um eine XML-Datei handelt.
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;
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.838 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen

  Alt 7. Okt 2004, 11:15
Zitat von schlock:
Nehmen wir an Du hast eine Tabelle mit den Spalten
ID (Integer), Status (String), Created (TDateTime) und Volume (Real)
Code:
  // 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);
Danke für die Antwort, aber mit Deiner Methode erzeugst Du ein sogenanntes Borland DataPacket XML Format.
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:
<?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>
Die passende *.xsd Datei zu Deinem Dataset könnte z.B. so aussehen:
Code:
<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>
Die *.xsd Datei habe ich mir vom XML Mapper aus Delphi 7 Enterprise erstellen lassen.

Irgend eine Idee?
  • Habe Datenbank mit z.b. Deiner Struktur
  • Habe *.xsd Datei (s.oben)
  • Will nun eine *.xml Datei (s.oben)
Und das Ganze am besten ohne viel "spezifischem" Quelltext, da das ganze für viele verschiedene Tabellen gebraucht wird.

Danke nochmal für die Antwort.

[edit]
Nachtrag:
Zitat:
Wenn es sich speziell um Datenbanktabellen handelt, bietet sich die Klasse
TCLientDataSet an. Diese kann Tabellenartige Strukturen sehr komfortabel in XML-Dateien speichern.
Das stimmt, aber man braucht dazu noch TXMLTransformer oder eine der anderen Komponenten die mit dem TClientDataSet verbunden werden. Und genau das weis ich nicht genau. (und wills wissen )
[/edit]
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
schlock

Registriert seit: 3. Sep 2004
20 Beiträge
 
#7

Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen

  Alt 7. Okt 2004, 11:48
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.838 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen

  Alt 7. Okt 2004, 12:02
Zitat von schlock:
Wenn Du unbedingt die von Dir angedeutete XML-Struktur haben möchest,
dann kannst Du auch mit dem ClientDataSet nix anfangen.
Doch das muß gehen ! (hoffe ich)

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)
Der universelle Transformator (Der Entwickler 06.2003)

Zitat von schlock:
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 ...
Und genau das will ich nicht !!!
In Delphi sollte das auch ohne Probleme (und ohne viel Aufwand) zu realisieren sein.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
peter_chen

Registriert seit: 25. Nov 2009
3 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Hat jemand Erfahrung mit Delphi und XML Dateien erzeugen

  Alt 25. Nov 2009, 09:08
Hallo ihr lieben,

entschuldigt, wenn ich diesen alten thread nochmal ausgrabe, aber kann es sein, dass die unten dargestellte Funktion nicht korrekt arbeitet?

Zitat von schlock:
Hast Du alle Daten eingepflegt kannst Du alles speichern:

Delphi-Quellcode:
  ClientDataSet.SaveToFile('D:\TestXmlDataSet.xml', dfXMLUTF8);
// oder ClientDataSet.SaveToFile('D:\TestXmlDataSet.xml');
Jedenfalls kommt bei mir in etwa 95% der Fälle fehlerhaftes XML heraus:

XML-Code:

<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>
[/quote="schlock"]
  ClientDataSet.LoadFromFile('D:\TestXmlDataSet.xml'); [/quote]

... 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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:14 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