XML Parse ve RSS - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Eğitim (https://www.delphican.com/forumdisplay.php?fid=19) +---- Forum: Makale (https://www.delphican.com/forumdisplay.php?fid=20) +---- Konu Başlığı: XML Parse ve RSS (/showthread.php?tid=1677) |
XML Parse ve RSS - SimaWB - 14-12-2017 Forumda XML parse ile ilgili örnekler mevcut ama bir tane de benden olsun Forumun RSS (RSS nedir) bilgilerini alıp ListView'da gösteren küçük bir uygulama yaptım. XML parse, ListView içinde Record saklama, ShellExecute ve TFormatSettings kullanma gibi konularda faydalı olacağını düşünüyorum. Ekran görüntüsü: Kodlarda çok fazla anlatılacak bir şey yok bence. Yine soru gelirse cevaplamaya hazırım unit main; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Xml.xmldom, Xml.XMLIntf, Xml.XMLDoc, Vcl.StdCtrls, Vcl.ComCtrls, Winapi.ShellApi; type TForm1 = class(TForm) lwXML: TListView; XMLDocument1: TXMLDocument; btnRefresh: TButton; procedure btnRefreshClick(Sender: TObject); procedure lwXMLDblClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private /// <summary> ListView'i XML verileri ile doldurur </summary> procedure FillList; /// <summary> ListView içinde tutulan veri hafızasını serbest bırakır </summary> procedure ClearListItems; /// <summary> String olarak verilen URL'yi varsayılan browser ile açar </summary> procedure OpenUrl(Url: String); /// <summary> XML ile gelen tarih bilgisini dd/mm/yyyy hh:nn:ss formatına çevirir </summary> /// <remarks> XML tarih formatına örnek: Tue, 12 Dec 2017 16:51:48 +0300 </remarks> function ChangeXmlDate(const xmlDate: String): String; public { Public declarations } end; TWebData = record title: String; date_: String; link: String; end; PWebData = ^TWebData; var Form1: TForm1; implementation uses DateUtils; {$R *.dfm} procedure TForm1.btnRefreshClick(Sender: TObject); begin FillList; end; procedure TForm1.FillList; var cur: TCursor; aNode: IXMLNode; NodeData: PWebData; begin cur := Screen.Cursor; Screen.Cursor := crHourGlass; ClearListItems; lwXML.Clear; lwXML.Items.BeginUpdate; try XMLDocument1.Active := False; XMLDocument1.FileName := 'http://www.delphican.com/syndication.php'; XMLDocument1.Active := True; aNode := XMLDocument1.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item'); repeat New(NodeData); NodeData.title := aNode.ChildNodes['title'].Text; NodeData.date_ := ChangeXmlDate(aNode.ChildNodes['pubDate'].Text); NodeData.link := aNode.ChildNodes['link'].Text; with lwXML.Items.Add do begin Caption := NodeData.title; SubItems.Add(NodeData.date_); Data := Pointer(NodeData); end; aNode := aNode.NextSibling; until (aNode = nil); finally lwXML.Items.EndUpdate; Screen.Cursor := cur; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ClearListItems; end; procedure TForm1.lwXMLDblClick(Sender: TObject); var NodeData: TWebData; begin if lwXML.Selected <> nil then begin NodeData := PWebData(lwXML.Selected.Data)^; OpenUrl(NodeData.link); end; end; procedure TForm1.OpenUrl(Url: String); var SEInfo: TShellExecuteInfo; begin FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo); SEInfo.Wnd := 0; SEInfo.lpFile := PChar(Url); SEInfo.lpParameters := nil; SEInfo.nShow := SW_SHOWDEFAULT; SEInfo.lpVerb := 'open'; SEInfo.lpDirectory := nil; ShellExecuteEx(@SEInfo); end; function TForm1.ChangeXmlDate(const xmlDate: String): String; var strDate: String; FS: TFormatSettings; I: Integer; begin strDate := Copy(xmlDate, 6, 20); FS := TFormatSettings.Create('en-US'); for I := 1 to 12 do begin Result := StringReplace(strDate, ' '+FS.ShortMonthNames[I]+' ', '/'+IntToStr(I)+'/', []); if Result <> strDate then Break; end; end; procedure TForm1.ClearListItems; var aItem: TListItem; begin for aItem in lwXML.Items do Dispose(PWebData(aItem.Data)); end; end. Kaynak kodlar ve projenin tamamı burada. XML Parse ve RSS - Tuğrul HELVACI - 14-12-2017 Ellerinize sağlık. Cvp: XML Parse ve RSS - TescilsizUzman - 14-12-2017 Merhaba, Emek ve paylaşımınız için teşekkür ederim. Konu ile pek bir ilgisi yok ama, yapmış olduğunuz örnek uygulama, bana daha önce DelphiCan Mobil Uygulaması yazılması konusunu hatırlattı. Yeni konu açılınca, uzak bildirim ve titreşim, yeni yorum yapılınca yalnızca uzak bildirm alınması hiç de fena olmaz. Aktivitenin daha da artmasına vesile olur. XML Parse ve RSS - SimaWB - 14-12-2017 Ben aslında bu projeyi IDE Eklentisi Yapmak konusunun ikinci bölümü için hazırladım Delphi IDE'sinde açılan, sürükle bırak mantığyla çalışan bir form içerisinde RSS bilgileri gözükecek. Fakat RSS'de okundu/okunmadı bilgisi yok (kullanıcı login'e gerek olmadığı için). Bu sebeple HTML Parse ve Login Olma şeklinde kullanımı tercih etmek durumunda kalabilirim. Cvp: XML Parse ve RSS - TescilsizUzman - 14-12-2017 (14-12-2017, Saat: 13:30)SimaWB Adlı Kullanıcıdan Alıntı: Ben aslında bu projeyi IDE Eklentisi Yapmak konusunun ikinci bölümü için hazırladım Gün boyunca Delphi IDE'si açık. Faydalı bir eklenti olacak. Şimdiden hayırlı olsun diyelim. Cvp: XML Parse ve RSS - uparlayan - 14-12-2017 (14-12-2017, Saat: 13:30)SimaWB Adlı Kullanıcıdan Alıntı: Ben aslında bu projeyi IDE Eklentisi Yapmak konusunun ikinci bölümü için hazırladım İlgiyle bekliyoruz XML Parse ve RSS - Bay_Y - 25-11-2020 Teşekkürler Elinize sağlık. |