Avatar billede smith1 Nybegynder
15. januar 2004 - 09:15 Der er 9 kommentarer

load data fra xml

hvordan kan jeg henter data ind i en memo fra en xml fil?
http://newz.dk/rss
Avatar billede athlon-pascal Juniormester
15. januar 2004 - 10:58 #1
Vil du bare hente xml-filen, eller skal den også parses (så der ikke er tags med)?
Avatar billede stoney Nybegynder
15. januar 2004 - 11:02 #2
Avatar billede athlon-pascal Juniormester
15. januar 2004 - 11:20 #3
Når du skal hente filen fra internettet, kan du evt. bruge denne "simple" metode, der hverken bruger Indy eller gemmer filen til harddisken:

uses Wininet;

// Nedstående funktion er baseret på koden på http://delphi.about.com/library/weekly/aa013001a.htm :o)
function GetInetStream(const URL: String; Stream: TStream): boolean;
const BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  sAppName: string;
begin
Result:=False;

if Stream = nil then
  Exit;

sAppName := 'Mozilla/3.0 (compatible; MozIE Netscape-plugin for Mozilla (Firebird))'; //ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),
                INTERNET_OPEN_TYPE_PRECONFIG,
              nil, nil, 0);
try
  hURL := InternetOpenURL(hSession,
            PChar(URL),
            nil,0,0,0);
  try
  repeat
    InternetReadFile(hURL, @Buffer,
                    SizeOf(Buffer), BufferLen);
    Stream.WriteBuffer(Buffer, BufferLen)
  until BufferLen = 0;
  Result:=True;
  finally
  InternetCloseHandle(hURL)
  end
finally
  InternetCloseHandle(hSession)
end
end;

function GetInetString(const URL: String; out S: String): Boolean;
var
  Stream: TMemoryStream;
begin
  Result := false;
  Stream := TMemoryStream.Create;
  try
    Result := GetInetStream(URL, Stream);
    if not Result then
      Exit;
    Stream.Position := 0;
    SetLength(S, Stream.Size);
    Result := Stream.Read(S[1], Stream.Size) = Stream.Size;
    if not Result then
      SetLength(S, 0);
  finally
    Stream.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  S: String;
begin
  if GetInetString('http://newz.dk/rss', S) then
    RichEdit1.Text := S;
end;
Avatar billede athlon-pascal Juniormester
15. januar 2004 - 11:31 #4
Brug denne i stedet, den fanger bedre "falske" url'er :o)

uses Wininet;

// Nedstående funktion er baseret på koden på http://delphi.about.com/library/weekly/aa013001a.htm :o)
function GetInetStream(const URL: String; Stream: TStream): boolean;
const BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  sAppName: string;
begin
Result:=False;

if Stream = nil then
  Exit;

sAppName := 'Mozilla/3.0 (compatible; MozIE Netscape-plugin for Mozilla (Firebird))'; //ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),
                INTERNET_OPEN_TYPE_PRECONFIG,
              nil, nil, 0);
try
  try
    hURL := InternetOpenURL(hSession,
              PChar(URL),
              nil,0,0,0);
    try
    repeat
      InternetReadFile(hURL, @Buffer,
                      SizeOf(Buffer), BufferLen);
      Stream.WriteBuffer(Buffer, BufferLen)
    until BufferLen = 0;
    Result:=True;
    finally
    InternetCloseHandle(hURL)
    end
  finally
    InternetCloseHandle(hSession)
  end;
except
  Result := false
end
end;

function GetInetString(const URL: String; out S: String): Boolean;
var
  Stream: TMemoryStream;
begin
  Result := false;
  Stream := TMemoryStream.Create;
  try
    Result := GetInetStream(URL, Stream);
    if not Result then
      Exit;
    Stream.Position := 0;
    SetLength(S, Stream.Size);
    Result := Stream.Read(S[1], Stream.Size) = Stream.Size;
    if not Result then
      SetLength(S, 0);
  finally
    Stream.Free;
  end;
end;
Avatar billede athlon-pascal Juniormester
15. januar 2004 - 11:33 #5
Jo forresten,
sAppName := 'Mozilla/3.0 (compatible; MozIE Netscape-plugin for Mozilla (Firebird))';
bør ændres til
sAppName := 'Mozilla/3.0 (compatible; ' + Application.Title + ')';

Held og lykke :o)
Avatar billede stoney Nybegynder
15. januar 2004 - 11:33 #6
athlon-pascal >>

Er det ikke bare dataene smith1 vil have/læse ?

Stoney
Avatar billede athlon-pascal Juniormester
15. januar 2004 - 11:36 #7
Stoney -> Jo, jeg tror han kan bruge dit link. Men når han skal hente selve filen, kan min kode være et alternativ til den download-kode der er i "dit" eksempel :o)

//athlon-pascal der demonstrerer mod Pro-muligheden for at skifte brugernavn.
Avatar billede smith1 Nybegynder
15. januar 2004 - 17:59 #8
hvor kan jeg downloade TXMLDocument komponeten? jeg har personal versionen
Avatar billede athlon-pascal Juniormester
16. januar 2004 - 08:25 #9
smith -> Du bliver nok nødt til at hente noget alternativt...

F.eks. http://www.philo.de/xml/ - men det kræver så noget lidt anden kode end den på http://delphi.about.com/library/weekly/aa072903a.htm ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester