Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Nicht-Normalisierte Abfrage nach XML exportieren (https://www.delphipraxis.net/131425-nicht-normalisierte-abfrage-nach-xml-exportieren.html)

BorisRisker 24. Mär 2009 18:52


Nicht-Normalisierte Abfrage nach XML exportieren
 
Hallo liebes Forum !

Ich möchte ein SQL-Abfrageergebnis nach XML exportieren.

Das Problem ist, dass das Ergebnis im Prinzip eine Baumstruktur hat, ungefähr so:

Kunde Positionsnummer Menge Preis
----- --------------- ----- -----
Boris 1 3 2,50
Boris 2 2 12,50
Boris 3 1 1,50

Das XML soll so aussehen:

<Bestellung>
<Kunde>Boris</Kunde>
<Bestellposition>
<Positionsnummer>1</Positionsnummer>
<Menge>3</Menge>
<Preis>2,50</Preis>
</Bestellposition>
<Bestellposition>
<Positionsnummer>2</Positionsnummer>
<Menge>2</Menge>
<Preis>12,50</Preis>
</Bestellposition>
<Bestellposition>
<Positionsnummer>3</Positionsnummer>
<Menge>1</Menge>
<Preis>1,50</Preis>
</Bestellposition>
</Bestellung>

Kann man sowas einfach realisieren ?

Das Problem ist auch, dass dieses Abfrageergebnis nur per .csv so vorliegt. Ich habe keine Sourcecodes von dem Ursprungsprogramm ...

Bin für jede Hilfe dankbar !!!

Gruß,
Boris

omata 25. Mär 2009 00:13

Re: Nicht-Normalisierte Abfrage nach XML exportieren
 
Vielleicht so...
Delphi-Quellcode:
procedure CSVtoXML(Dateiname:string);
type TSpalte = (sKunde, sPNr, sMenge, sPreis);
var Quelle, Ziel:Textfile;
    Zeile, oldKunde:string;
    Values:array[TSpalte] of string;
    Spalte:TSpalte;
    Posi:integer;
begin
  assignfile(Quelle, Dateiname);
  assignfile(Ziel, ChangeFileExt(Dateiname, '.xml'));
  try
    reset(Quelle);
    rewrite(Ziel);
    oldKunde:='';
    while not Eof(Quelle) do begin
      readln(Quelle, Zeile);
      for Spalte:=low(TSpalte) to high(TSpalte) do begin
        Posi:=pos(';', Zeile);
        if Posi = 0 then
          Posi:=length(Zeile)+1;
        Values[Spalte]:=copy(Zeile, 1, Posi-1);
        delete(Zeile, 1, Posi);
      end;
      if oldKunde <> Values[sKunde] then begin
        if oldKunde <> '' then
          writeln(Ziel, '</Bestellung>');
        oldKunde:=Values[sKunde];
        writeln(Ziel, '<Bestellung>');
        writeln(Ziel, ' <Kunde>' + Values[sKunde] + '</Kunde>');
      end;
      writeln(Ziel, ' <Bestellposition>');
      writeln(Ziel, ' <Positionsnummer>' + Values[sPNr] + '</Positionsnummer>');
      writeln(Ziel, ' <Menge>' + Values[sMenge] + '</Menge>');
      writeln(Ziel, ' <Preis>' + Values[sPreis] + '</Preis>');
      writeln(Ziel, ' </Bestellposition>');
    end;
    if oldKunde <> '' then
      writeln(Ziel, '</Bestellung>');
  finally
    closefile(Quelle);
    closefile(Ziel);
  end;
end;

himitsu 25. Mär 2009 11:20

Re: Nicht-Normalisierte Abfrage nach XML exportieren
 
Vergeßt nicht, das XML laut Konvention nur einen Hauptknoten besitzen darf.

ansonsten soltle das so auch erstmal gehn,
im Prinzip mußt du nur die CSV-Datei auslesen und nach XML konvertieren.

das ginge auch, indem du eine EXM-Datei erstellst und ihr die Daten übergibst (gibt hier ja genug XML-Libs zu finden)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 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