Witam. Zmieniłem ten temat, bo z zapisem pliku już sobie poradziłem. Mam nadzieje, że taki format może być, próbowałem uzyć atrybutów,
ale i tak mam problem z ich odczytem. Mam błąd AcessVioletion, a więc poniższy kod tworzy plik xml i pytanie jak odczytać poszczegółne
dane to jest to co jest w sekcji "Version" oraz dane wszystkich userów w sekcjach "user" - prosiłbym o przykładowy kod. Z gory dziękuję.
var
I : integer;
XmlDoc : TXMLDocument;
XMLNode : IXMLNode;
XMLValues : IXMLNode;
StartItemNode : IXMLNode;
begin
xmlDoc := TXMLDocument.Create(nil);
try
XmlDoc.Active := True;
StartItemNode := XMLDoc.AddChild('GG_DATABASE');
XMLNode := StartItemNode.AddChild('Version');
XMLValues := XMLNode.AddChild('num');
XMLValues.Text := '1';
XMLValues := XMLNode.AddChild('sub');
XMLValues.Text := '25';
for I := 1 to 3 do
begin
// Dane tylko przykładowe dla testów:
XMLNode := XMLDoc.DocumentElement.AddChild('user');
XMLValues := XMLNode.AddChild('Nick');
XMLValues.Text := 'OSOBA ' + IntToStr(I);
XMLValues := XMLNode.AddChild('GG');
XMLValues.Text := IntToStr(Random(999999) + 1000);
end;
XmlDoc.SaveToFile('D:\test.xml');
finally
xmlDoc := nil;
end;
end;
Oto mój plik XML. Jak go poprawnie wczytać. Ewentualnie czy moge użyć atrybutów dla usera
zamiast kolejnych wartośći i jeżeli tak, to jak je wczytać. Próbowałem zmienionego kodu d;a rss.
jak i oryginału z http://delphi.about.com/od/internetintrane..._rss_read_3.htm ale mam błąd Acess
Violation. Nawet na oryginalnym index.xml pobranym z tamej strony i oryginalnym kodzie z niej
Oczywiście obiekt XmlDoc tworze i aktywuje w identyczny sposób jak przy zapisywaniu pliku.
<GG_DATABASE>
<Version>
<num>1</num>
<sub>25</sub>
</Version>
<user>
<Nick>OSOBA 1</Nick>
<GG>710134</GG>
</user>
<user>
<Nick>OSOBA 2</Nick>
<GG>347736</GG>
</user>
<user>
<Nick>OSOBA 3</Nick>
<GG>112922</GG>
</user>
</GG_DATABASE>
EDIT: już sobie poradziłem. Dałem się nabrać, bo zapis odbywa się poprawnie, ale do odczytu trzeba w
parametrze konstruktora podać nazwę formatki ewentualnie Application. Odczyt mojego xmla jest tutaj:
var
XmlDoc : TXMLDocument;
StartItemNode : IXMLNode;
ANode : IXMLNode;
Nick_S, GG_S : string;
begin
xmlDoc := TXMLDocument.Create(Form1);
XMLDoc.FileName := 'D:\test.xml';
XMLDoc.Active := True;
StartItemNode := XMLDoc.DocumentElement.ChildNodes[1];
ANode := StartItemNode;
repeat
Nick_S := ANode.ChildNodes['Nick'].Text;
GG_S := ANode.ChildNodes['GG'].Text;
ListBox1.Items.Add('Ksywka: ' + Nick_S + ' Numer GG: ' + GG_S);
ANode := ANode.NextSibling;
until ANode = nil;
end;