플밍

XML 읽어오기 본문

프로그래밍/Delphi

XML 읽어오기

너구리안주 2007. 11. 8. 16:34

//============================================================
// XML 읽어오기
//============================================================
procedure TfrmMain.XMLRead(Xurl: string);
var
  XMLURL : String;
  ADPLocalFile : TFileName;
  StartItemNode : IXMLNode;
  ANode : IXMLNode;
  STitle, sDesc, sLink, sDate : widestring;
begin
  ListView1.Clear;
  XMLURL := Xurl;
  ADPLocalFile := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'temp.adpheadlines.xml';

  Screen.Cursor:=crHourglass;
  try
    if not DownloadURLFile(XMLURL, ADPLocalFile)  then
    begin
      Screen.Cursor:=crDefault;
      Raise Exception.CreateFmt('올바른 주소가 아니거나 알 수 없는 이유로 에러가 발생했습니다.',[]);
      Exit;
    end;

    if not FileExists(ADPLocalFile) then
    begin
      Screen.Cursor:=crDefault;
      raise exception.Create('XML문서에 에러가 있습니다');
      Exit;
    end;

    XMLDoc.FileName := ADPLocalFile;
    XMLDoc.Active:=True;


    StartItemNode:=XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item');
    ANode := StartItemNode;
    if ANode = nil then
    begin
      showmessage('해당 피드(RSS)에 정보가 없습니다');
      XMLDoc.Active := False;
      exit;
    end;
    repeat
      STitle := ANode.ChildNodes['title'].Text;
      sLink := ANode.ChildNodes['link'].Text;
      sDesc := ANode.ChildNodes['description'].Text;
      sDate := ANode.ChildNodes['pubDate'].Text;
      if sDate = '' then sDate := ANode.ChildNodes['dc:date'].Text;


      //add to list view
      with ListView1.Items.Add do
      begin
        Caption := STitle;
        SubItems.Add(sDate);
        SubItems.Add(sLink);
        SubItems.Add(sDesc);
      end;

      ANode := ANode.NextSibling;
    until ANode = nil;

    XMLDoc.Active:=False;
  finally
    DeleteFile(ADPLocalFile);
    Screen.Cursor:=crDefault;
    XMLDoc.Active:=False;
  end;
end;






Comments