використовуємо txmldocument

Додаємо в проект новий модуль File-> New-> Unit. Тут ми будемо описувати процедури і функції, не пов'язані з інтерфейсом і глобальні змінні. Першою буде функція для завантаження бази новин. Всі новини будемо зберігати в форматі XML.

function LoadXMLBase (owner. TComponent). Boolean;
begin
Result: = false;
XMLDoc: = TXMLDocument.Create (owner);
if FileExists ( 'news.xml') then begin
XMLDoc.FileName: = 'news.xml';
Result: = true;
end else MessageDLG ( 'Не вдалося знайти файл бази новин', mtError, [mbOK], 0);
end;

Збережемо файл в папці з програмою. На перших порах цього достатньо, в процесі написання програми структуру доопрацюємо.

Тепер потрібно навчитися завантажувати дані з файлу в дерево новин. Саме для цього напишемо наступну процедуру:

procedure LoadTree (tree. TTreeView);
var
i. Integer;
Node. IXMLNode;
begin
xmlDoc.Active:=true;
for i: = 0 to XMLDoc.DocumentElement.ChildNodes.Count - 1 do begin
Node: = XMLDoc.DocumentElement.ChildNodes [i]; AddTreeNode (tree, Node.ChildNodes [ 'Group'] .Text, Node.ChildNodes [ 'Name'] .Text);
end;
xmldoc.Active:=false;
end;

Процедура в якості параметра приймає наше дерево і додає в нього вузли. У циклі перебираємо дочірні вузли документа, їх кількість зберігається в св-ве XMLDoc.DocumentElement.ChildNodes.Count Як видно процедура використовує другу процедуру AddTreeNode, яка приймає два строкових параметра Node.ChildNodes [ 'Group']. Text і Node.ChildNodes [ ' Name ']. Text і додає їх до вузлів дерева відповідним чином. Навіщо цей код винесено в окрему процедуру - розповім пізніше. А поки дивимося текст цієї процедури:

procedure AddTreeNode (tree. TTreeView; sGroup, sName. string);
var
j. integer;
tnd. TTreeNode;
find. boolean;
begin
if sGroup = '' then tnd: = nil
else begin
find: = false;
for j: = 0 to tree.Items.Count-1 do begin
if tree.Items.Item [j] .Text = sGroup then begin
tnd: = tree.Items.Item [j];
find: = true;
break;
end;
end;
if not find then tnd: = tree.Items.AddChild (nil, sGroup);
end;
tree.Items.AddChild (tnd, sName);
end;

Процедура AddTreeNode вельми проста: тут ми перевіряємо значення параметра sGroup. якщо воно порожнє, то додаємо вузол в нульовий рівень. Якщо цей параметр має значення, шукаємо відповідний вузол в нульовому рівні і додаємо в нього дочірній якщо знаходимо. Якщо вузла з таким значенням немає, створюємо його. Таким чином реалізується угруповання стрічок новин.

Тепер створюємо обробник події OnCreate головної форми. Він виглядає наступним чином:

procedure TRSSReaderV2.FormCreate (Sender: TObject);
begin
if LoadXMLBase (self) then begin
LoadTree (NewsList);
end;
end;

Запускаємо програму (F9). Ось що повинно вийти.

використовуємо txmldocument

Схожі статті