cs_jfs59
Messages postés178Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention 2 février 2010
-
20 janv. 2010 à 13:28
cs_jfs59
Messages postés178Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention 2 février 2010
-
25 janv. 2010 à 20:25
Bonjour,
voila mon problème .. j'ai un fichier xml de configuration dans le quel je rajoute des éléments par ce code :
procedure TListEdit.BitBtn2Click(Sender: TObject);
Var Categorie, Systeme, nom , code : IXMLNode;
begin
with form1.ConfigXML.ChildNodes.Nodes['Configuration'].ChildNodes do
with Nodes['Systemes'] do Systeme := AddChild('Systeme');
Nom := Systeme.AddChild('Nom');
Nom.Text := LabeledEditSyst.Text;
Code := Systeme.AddChild('Code');
Code.Text := LabeledEditSystCode.Text ;
Form1.EtiqXML.SaveToFile(ExtractFilePath(application.ExeName) + 'Config\cfg.xml');
end;
puis je l'affiche par ce code:
for i := 0 to stringgrid1.rowcount-1 do stringgrid1.rows[i].clear;
stringgrid1.RowCount := 1 ;
stringgrid1.Cells[0, 0] := 'SYSTEMES';
stringgrid1.Cells[1, 0] := 'CODES';
with form1.ConfigXML.ChildNodes.Nodes['Configuration'].ChildNodes do
with Nodes['Systemes'].ChildNodes do
begin
for x := 0 to count - 1 do
begin
stringgrid1.RowCount := stringgrid1.RowCount + 1 ;
stringgrid1.Cells[0, x + 1] := GetNode(x).ChildNodes.Nodes['Nom'].Text;
stringgrid1.Cells[1, x + 1] := GetNode(x).ChildNodes.Nodes['Code'].Text;
end;
end;
stringgrid1.fixedrows := 1 ;
si je ne ferme pas le programme j'ai une exception
This operation cannot be performed with a node of type PCDATA
j'ai mis des traceurs ! mon count augmente de 3 au lieu de 1
si je ferme le programme et ouvre ca marche !
j'ai inspecté le fichier XML tout est normal
j'ai essayé ce code :
for i := 0 to stringgrid1.rowcount-1 do stringgrid1.rows[i].clear;
X:= 1;
stringgrid1.RowCount := 1 ;
stringgrid1.Cells[0, 0] := 'SYSTEMES';
stringgrid1.Cells[1, 0] := 'CODES';
with form1.ConfigXML.ChildNodes.Nodes['Configuration'].ChildNodes do
with Nodes['Systemes'].ChildNodes do
Syst := First;
if assigned(Syst) then
repeat
stringgrid1.RowCount := stringgrid1.RowCount + 1 ;
stringgrid1.Cells[0, x ] := inttostr(x);
stringgrid1.Cells[0, x ] := Syst.ChildNodes.Nodes['Nom'].Text;
stringgrid1.Cells[1, x ] := Syst.ChildNodes.Nodes['Code'].Text;
x := x+1;
Syst := Syst.NextSibling;
until not assigned(Syst);
stringgrid1.fixedrows := 1 ;
Idem
j'ai essayé refresh et resync sur le xml
j'ai passé la propriété active du XML a true et/ ou false
je deviens chèvre ... Béééééhhhhhh
le probleme je suis sur c'est l'increment du count a 3 au lieu de 1 !
mais ou j'ai commis l'erreur ... et quelle erreur puisque le XML est nickel et se relis si je ferme le prog !
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 20 janv. 2010 à 14:40
j'ai deja eu le probleme, mais je ne sais plus exactement comment je l'ai corrigé.
Si tu fais du pas à pas sur le nodename de chaque sibbling, tu verra des noeuds dont le nom est '#', qui se sont inserés entre chacun de tes noeuds.
Je crois que tu peux le corriger en enlevant (ou ajoutant ?) poPreserveWhiteSpace des ParseOptions du XMLDocument. Je ne suis pas sur que ce soit ca, mais il me semble que c'est un probleme a cause des espaces qu'il convertit en noeuds (ou peut etre que ca se corrige en changeant le DOMVendor ou un truc dans le genre).
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 25 janv. 2010 à 14:01
as tu essayé un truc dans le genre
with Nodes['Systemes'].ChildNodes do
begin
for x := 0 to count - 1 do
begin
if GetNode(x).NodeName <> '' then
begin
stringgrid1.RowCount := stringgrid1.RowCount + 1 ;
stringgrid1.Cells[0, x + 1] := GetNode(x).ChildNodes.Nodes['Nom'].Text;
stringgrid1.Cells[1, x + 1] := GetNode(x).ChildNodes.Nodes['Code'].Text;
end;
end;
end;
essaye de voir la difference entre tes "vrais" noeud et ceux rajoutés automatiquement (nodename, nodetype, ...) pour pouvoir ignorer ceux qui genent
Vous n’avez pas trouvé la réponse que vous recherchez ?