Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: XML-Datei einlesen

  Alt 6. Dez 2021, 15:03
das XML-Dokument ist nicht selbst gemacht. Auf der Seite http://www.ecb.europa.eu/stats/eurof...xref-daily.xml veröffentlicht die EZB einmal täglich die aktuellen Euro-Kurse. Beim Einlesen der eigentlichen Kurse hat mir schon jemand geholfen, aber das mit dem Datum bekomme ich nicht auf die Reihe.
Wer immer dieses Format entwickelt hat sollte standrechtlich erschossen werden .
Code:
   <Cube>
      <Cube time='2021-12-03'>
         <Cube currency='USD' rate='1.1291'/>
         <Cube currency='JPY' rate='127.97'/>
         <Cube currency='BGN' rate='1.9558'/>
         <Cube currency='CZK' rate='25.415'/>
         <Cube currency='DKK' rate='7.4362'/>
         <Cube currency='GBP' rate='0.85048'/>
      </Cube>
   </Cube>
Es gibt hier drei verschiedene Typen von "Cube"-Nodes, und damit kommt nicht mal der XML Data Binding Wizard von Delphi klar.

Das hier scheint zu funktionieren:

Delphi-Quellcode:
procedure TForm1.Display(const Fmt: string; const Values: array of const);
begin
  memo1.Lines.Add(Format(Fmt, Values));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  LEnvelope: IXMLDocument;
  LOuterCube: IXMLNode;
  LTimeCube: IXMLNode;
  LCurrencyCube: IXMLNode;
begin
  LEnvelope := TXmlDocument.Create(nil);
  LEnvelope.LoadFromFile('C:\Users\Peter_2\Downloads\eurofxref-daily.xml');
  LEnvelope.Active := True;
  memo1.Clear;
  LOuterCube := LEnvelope.DocumentElement.ChildNodes[2];
  LTimeCube := LOuterCube.ChildNodes[0];

  Display('Date: %s', [LTimeCube.Attributes['time']]);
  LCurrencyCube := LTimeCube.ChildNodes[0];
  while Assigned(LCurrencyCube) do begin
    Display('Currency: %s; Rate: %s',
      [LCurrencyCube.Attributes['currency'],
       LCurrencyCube.Attributes['rate']] );
    LCurrencyCube := LCurrencyCube.NextSibling;
  end;
end;
Peter Below
  Mit Zitat antworten Zitat