Newsgroup: it.comp.lang.delphi
Titolo: Manipolare file XML

Salve gente!
Vorrei chiedervi aiuto a trovare l'errore che faccio in un semplice ciclo.
In pratica, dato il seguente file XML, devo mettere su un Tmemo
le stringhe composte dai valori di Frequency+'-'+DetectorType+'-'+Name
Il file XML è fatto così:
 
 
<?xml version="1.0"?>
<ArrayOfMemoryEntry xmlns:xsi="pippo" xmlns:xsd="pluto">
   <MemoryEntry>
     <IsScanned>false</IsScanned>
     <IsFavourite>true</IsFavourite>
     <Name>Non ID  2.760,921 kHz USB</Name>
     <GroupName>Volmet</GroupName>
     <Frequency>2760921</Frequency>
     <DetectorType>USB</DetectorType>
     <Shift>0</Shift>
     <FilterBandwidth>4290</FilterBandwidth>
     <CenterFrequency>0</CenterFrequency>
   </MemoryEntry>
   <MemoryEntry>
     <IsScanned>false</IsScanned>
     <IsFavourite>true</IsFavourite>
     <Name>Shannon 3.413 kHz USB</Name>
     <GroupName>Volmet</GroupName>
     <Frequency>3412800</Frequency>
     <DetectorType>USB</DetectorType>
     <Shift>0</Shift>
     <FilterBandwidth>2030</FilterBandwidth>
     <CenterFrequency>0</CenterFrequency>
   </MemoryEntry>
   <MemoryEntry>
     <IsScanned>false</IsScanned>
     <IsFavourite>true</IsFavourite>
     <Name>Pippo</Name>
     <GroupName>favati</GroupName>
     <Frequency>12412800</Frequency>
     <DetectorType>USB</DetectorType>
     <Shift>0</Shift>
     <FilterBandwidth>2030</FilterBandwidth>
     <CenterFrequency>0</CenterFrequency>
   </MemoryEntry>
 
....
....
....
</ArrayOfMemoryEntry>
 
 
 
 
 
Il ciclo che faccio io è questo:
 
 
var
openDialog : TOpenDialog;
Dati: IDOMNode;
i:integer;
strtmp:string;
freqtmp,modtmp,descrtmp:string;
 
 
 
      XMLDocument1.LoadFromFile(openDialog.FileName); //tutto ok!
      XMLDocument1.Active := True;
 
 
      Dati:=XMLDocument1.DOMDocument.firstChild;
      Dati := Dati.nextSibling;
      Dati := Dati.firstChild;
      Dati := Dati.firstChild; //in modo tale da essere sul "figlio" che 
mi interessa
      while Dati<>nil do
       begin
         strtmp:='';
         if Dati.nodeName='Frequency' then
          begin
           freqtmp:=Dati.nodeValue;
          end;
 
         if Dati.nodeName='DetectorType' then
          begin
            modtmp:=Dati.nodeValue;
          end;
 
         if Dati.nodeName='Name' then
          begin
            descrtmp:=Dati.nodeValue;
          end;
         strtmp:=freqtmp+'-'+modtmp+'-'+descrtmp;
         if (freqtmp<>'') then memo1.Lines.Add(strtmp);
         Dati := Dati.nextSibling;
       end;
 
 
Il problema è che sembra iterare correttamente, ma quando entra dentro 
gli "if",Dati.nodevalue è sempre nil.
 
Come mai secondo voi?
E' la prima volta che maneggio gli xml e per mia fortuna sono partito 
con un file molto semplice.
 
Idee? Sto impazzendo...

E' sempre così...dopo aver chiesto aiuto trovo la soluzione...
 
 
      XMLDocument1.LoadFromFile(openDialog.FileName);
      XMLDocument1.Active := True;
 
       strtmp:='';
       Dati:=XMLDocument1.DOMDocument.firstChild;
       Dati := Dati.nextSibling;
       for I:= 0 to XMLDocument1.DocumentElement.ChildNodes.Count-1 do
         begin
         strtmp:='';
 
strtmp:=XMLDocument1.DocumentElement.ChildNodes[I].ChildNodes.FindNode('Frequency').NodeValue+'-'+
 
XMLDocument1.DocumentElement.ChildNodes[I].ChildNodes.FindNode('DetectorType').NodeValue+'-'+
 
XMLDocument1.DocumentElement.ChildNodes[I].ChildNodes.FindNode('Name').NodeValue;
         memo1.Lines.Add(strtmp);
 
         end;