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:
Il tag item può anche essere più di uno.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>
Questo che ho postato è il file che ho generato con questo codice:
Penso che i rapporti di parentelacodice: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;siano rispettati.
Ho poi creato una procedura per la lettura del file:
MyxmlDoc:TXMLDocument;
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.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;
Avete qualche idea del perchè non funzioni per come dovrebbe?
Sperando di essere stato abbastanza chiaro vi ringrazio in anticipo

siano rispettati.
Rispondi quotando