Delphi Can
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 Smile

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ü:

qJrjo3.png



Kodlarda çok fazla anlatılacak bir şey yok bence. Yine soru gelirse cevaplamaya hazırım Smile
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 Smile
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 Smile
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.

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 Smile
Delphi IDE'sinde açılan, sürükle bırak mantığyla çalışan bir form içerisinde RSS bilgileri gözükecek.

İlgiyle bekliyoruz Smile


XML Parse ve RSS - Bay_Y - 25-11-2020

Teşekkürler Elinize sağlık.