Struktura

Kanał rss to w rzeczywistości plik xml o takiej strukturze:
 
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
 <channel>
  <title>Nazwa kanału</title>
  <link>http://www.4programmers.net/</link>
  <description><![CDATA[Informacje o kanale]]></description>
 
<item>
     <title>Pierwszy news</title>
     <link>http://www.4programmers.net/news.php?id=1</link>
     <description><![CDATA[Treść newsa]]></description>
</item>
 
<item>
     <title>Drugi news</title>
     <link>http://www.4programmers.net/news.php?id=2</link>
     <description><![CDATA[Treść newsa]]></description>
</item>
 
 </channel>
</rss>
 

Obsługa


Stuktura jest chyba oczywista nawet dla laików. Tylko jak do cholery to odczytać? Na pewno potrzebujemy parsera XML - ja wybrałem XMLDocument (jest w Delphi 2009 Tria - tyle wiem :). Przy jego pomocy udało mi się stworzyć coś na wzór tego paska z telewizji TVN24. Nie udostępniam go, bo wywala tyle errorów, że much nie siada.

Potrzebne komponenty


Wstaw na formę ListBoxa, Memo, Buttona oraz oczywiście nasz niezawodny parser.

Właściwośći ReadOnly Mem'a ustaw na true.
Wykasuj wszystkie linie z memo.
Nazwę parsera na np. XMLDoc.

Dodaj zmienne:
 
var
 
   Linki, Tresci : TStringList;
 


Kod

 
procedure TForm2.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', PWideChar(Linki[ListBox1.ItemIndex]), nil, nil, SW_SHOWNORMAL); // Po kliknięciu przycisku otwórz przeglądarkę z pełną wersją artykułu
end;
 
procedure TForm2.FormShow(Sender: TObject);
var
   PierwszyNews : IXMLNode;
   News : IXMLNode;
   sTytul, sTresc, sLink : WideString;
begin
  Linki := TStringList.Create;
  Tresci := TStringList.Create; //Tworzymy zmienne
 
  XMLDoc.Active:=True; //Aktywujemy parser
  XMLDoc.LoadFromFile('C:\Kanal.xml');
 
  PierwszyNews := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item') ;
  News := PierwszyNews;
  repeat
    sTytul := News.ChildNodes['title'].Text;            //∨
    sLink := News.ChildNodes['link'].Text;             //Ustawiamy wartości zmiennych na aktualnie parsowany item
    sTresc := News.ChildNodes['description'].Text;      //∧
 
    //dodawanie tytułu newsa do listboxa i stringlist'ów∨
      ListBox1.Items.Add(sTytul);
      Tresci.Add(sTresc);
      Linki.Add(sLink);
 
      News := News.NextSibling;
  until News = nil;
 
  end;
 
 
procedure TForm2.ListBox1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add(Tresci[ListBox1.ItemIndex]); // Czyścimy zawartość memo i wstawiamy treść newsa
end;
 


Jeśli nie masz na dysku pliku .xml poczytaj o ściąganiu plików w artykule o Indy.

Wynik końcowy


Kategoria: Delphi » Gotowce

4 komentarze

Avatar: scv444
Napisany 2009-11-29 11:17 przez scv444

i tak dobrze - mój pierwszy art

Avatar: Patryk27
Napisany 2009-11-28 14:36 przez Patryk27

Widywałem gorsze ;)
7 na 10 punktów

Avatar: Coldpeer
Napisany 2009-08-18 00:07 przez Coldpeer

spoko, w sumie przenioslem ;)

Avatar: scv444
Napisany 2009-08-17 20:04 przez scv444

z góry przepraszam za umieszczenie artykułu w nieodpowiedniej kategorii

4programmers.net