Ciao ragazzi, ho un problema con un applicazione che sto scrivendo in delphi.
Devo creare un file di configurazione xml per il programma che contiene alcune impostazioni che mi serviranno per fare dei filtri per alcune query su un database, per essere più precisi sarà di questa forma:
codice:
<?xml version="1.0"?>
<Filtri exe="Statistiche.exe" version="0.1">
<FiltriStandard>
<Filtro1 Attr="NomeFiltrostd1">
<Item condizione="condizioneSelect"/>
</Filtro1>
<Filtro2 Attr="NomeFiltrostd2">
<Item condizione="condizioneSelect"/>
</Filtro2>
</FiltriStandard>
<FiltriPersonalizzati>
<Filtro1 Attr="NomeFiltropers1">
<Item condizione="condizioneSelect"/>
</Filtro1>
<Filtro2 Attr="NomeFiltropers1">
<Item condizione="condizioneSelect"/>
</Filtro2>
</FiltriPersonalizzati>
</Filtri>
Il tag item può anche essere più di uno.
Questo che ho postato è il file che ho generato con questo codice:
codice:
procedure TForm1.FormCreate(Sender: TObject);
var
Root,FiltriStandard,FiltriPersonalizzati,NomeFiltro,Condizione : IXMLNode;
doc:IXMLDocument;
begin
doc := NewXMLDocument;
Root := Doc.AddChild('Filtri');;
Root.Attributes['exe'] := 'Statistiche.exe';
Root.Attributes['version'] := '0.1';
FiltriStandard := Root.AddChild('FiltriStandard');
NomeFiltro := FiltriStandard.AddChild('Filtro1');
NomeFiltro.Attributes['Attr'] := 'NomeFiltrostd1';
Condizione := NomeFiltro.AddChild('Item');
Condizione.Attributes['condizione'] := 'condizioneSelect';
NomeFiltro := FiltriStandard.AddChild('Filtro2');
NomeFiltro.Attributes['Attr'] := 'NomeFiltrostd2';
Condizione := NomeFiltro.AddChild('Item');
Condizione.Attributes['condizione'] := 'condizioneSelect';
FiltriPersonalizzati := Root.AddChild('FiltriPersonalizzati');
NomeFiltro := FiltriPersonalizzati.AddChild('Filtro1');
NomeFiltro.Attributes['Attr'] := 'NomeFiltropers1';
Condizione := NomeFiltro.AddChild('Item');
Condizione.Attributes['condizione'] := 'condizioneSelect';
NomeFiltro := FiltriPersonalizzati.AddChild('Filtro2');
NomeFiltro.Attributes['Attr'] := 'NomeFiltropers1';
Condizione := NomeFiltro.AddChild('Item');
Condizione.Attributes['condizione'] := 'condizioneSelect';
Doc.XML.Text := XmlDoc.FormatXMLData(Doc.XML.Text);
doc.Active := true;
Doc.SaveToFile(ExtractFilePath(Application.ExeName)+'prova.xml');
end;
Penso che i rapporti di parentela
siano rispettati.
Ho poi creato una procedura per la lettura del file:
MyxmlDoc:TXMLDocument;
codice:
procedure TForm1.Button1Click(Sender: TObject);
var FiltriStandard,FiltriPersonalizzati,NomeFiltro : IXMLNode;
Procedure ProcessNode(node:IXMLNode;list:TLMDListBox);
begin
if node = Nil then exit;
list.Items.Add(VarToStr(Node.Attributes['Attr']));
ProcessNode(Node.NextSibling,list);
end;
begin
{ recupero i filtri dal file xml forse -.-}
MyXmldoc1.FileName := ExtractFilePath(Application.ExeName) + 'prova.xml';
MyXmldoc1.Active := TRUE;
Root := MyXmldoc1.DocumentElement.ChildNodes.First;
FiltriStandard := Root.ChildNodes.First;
ProcessNode(FiltriStandard,LMDListBox1);
FiltriPersonalizzati := Root.NextSibling;
ProcessNode(FiltriPersonalizzati,LMDListBox2);
end;
Quello che faccio in questa procedura è leggere i tag dei figli di FiltriStandard e FiltriPersonalizzati e inserirli in una listbox. Per Filitri Standard non ho nessun problema, ma i valori che mi interessano del nodo FiltriPersonalizzati non riesco a recuperarli.
Avete qualche idea del perchè non funzioni per come dovrebbe?
Sperando di essere stato abbastanza chiaro vi ringrazio in anticipo