Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   XML-Datei einlesen (https://www.delphipraxis.net/209427-xml-datei-einlesen.html)

zeras 5. Dez 2021 17:48

AW: XML-Datei einlesen
 
Warum fragst du die Zeit
Delphi-Quellcode:
 GetNamedItem('Cube time').NodeValue;


so ab, aber Currency mit

Delphi-Quellcode:
 GetNamedItem('currency').NodeValue

peterbelow 6. Dez 2021 16:03

AW: XML-Datei einlesen
 
Zitat:

Zitat von Adenos (Beitrag 1498689)
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr.
Seite 2 von 2     12   

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