XML-Delphi: Jak to zrobić?

0

Cześć Ślęczałem nad tym cały weekend i naprawdę już nie mam pomysłu, jak to zrobić. Pomóżcie, jestem początkujący i dopiero raczkuję w Delphi. Mam sobie plik.xml zbudowany w ten sposób:

<baza>
 <temat>
   <tytuł>PC Format</tytuł>
   <info>Jakiś tam opis</info>
 </temat>
 <temat>
   <tytuł>Ekspert</tytuł>
   <info>Inny Opis</info>
 </temat>
 <temat>
   <tytuł>Chip</tytuł>
   <info>Opis będzie</info>
 </temat>
</baza>

Jak widać jest mało skomlikowana budowa, ale... Kiedy w procedurze FormCreate wczytuje tematy do Listbox`a (Sorted:=True) wszystkie tematy są wczytywane i automatycznie sortowane alfabetycznie. Problemu by nie było gdybym zmienił Sorted:=False w Listbox, ale wtedy byłaby kaszana z tytułami.

procedure TForm1.FormCreate(Sender: TObject);
var
 i : integer;
begin
 XML.LoadFromFile('file.xml');
 XML.Active:=True;

 for i:=0 to XML.DocumentElement.ChildNodes.Count -1 do
 Listbox1.Items.Add(XML.DocumentElement.ChildNodes[i].ChildValues['tytuł']);
end;

Problem pojawia się w procedurze OnClick Listboxa. Kiedy klikam na np: PC Format wyskakuje mi opis w Memo: "Opis będzie" zamiast: "Jakiś tam opis", podobnie jest też kiedy wybieram temat Chip, a opis zamiast być: "Opis będzie, to wyskakuje "Jakiś tam opis".

procedure TForm1.ListBox1Click(Sender: TObject);
begin
 XML.LoadFromFile('file.xml');
 XML.Active:=True;
 Memo1.Lines.Clear;
 Memo1.Lines.Add(XML.DocumentElement.ChildNodes[Listbox1.ItemIndex].ChildValues['opis']);
end;

Teraz pytanie: Jak posortować dane w pliku xml, chodzi mi o to "drzewko", które byłoby posortowane przy zapisie wg tytułów z przyporządkowanymi do tytułu odpowiednimi opisami lub też zamiast tego...
Jak przyporządkować indexy z listboxa konkretnym tytułom tak, żeby po kliknięciu tytułu wyświetlał sie odpowiedni opis.

0

W komponentach jest TXML2INI czy coś takiego. Użyć!

0
procedure TForm1.ListBox1Click(Sender: TObject);
var
  i: Integer;
begin
 XML.LoadFromFile('file.xml');
 XML.Active:=True;
 Memo1.Lines.Clear;
 for i := 0 to {tutaj ilosc wpisow w pliku} do
 begin
   if Listbox1.Items.Strings[Listbox1.ItemIndex] = XML.DocumentElement.ChildNodes[i].ChildValues['tytul'] then
   begin
     Memo1.Lines.Add(XML.DocumentElement.ChildNodes[i].ChildValues['opis']);
     Break;
   end;
 end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1