Bonjour,

J'ai ajouté un composant TXMLDocument sur ma form ainsi qu'un memo et deux boutons.
Les options du XML sont : [doNodeAutoIndent,doAttrNull]

Ensuite, je crée un document XML comme cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
procedure TForm1.Button1Click(Sender: TObject);
Var
  nodeDoc,node : IXMLNode;
  S : UTF8string;
Begin
  nodeDoc := Xml.AddChild('xml');
  node := nodeDoc.AddChild('Tag');  node.Attributes['item'] := 'Value1';
  node := nodeDoc.AddChild('Tag');  node.Attributes['item'] := 'Value2';
  node := nodeDoc.AddChild('Tag');  node.Attributes['item'] := 'Value3';
  Xml.SaveToXML(s);
  Memo1.Text := S;
End;
Ce qui donne ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
<xml>
  <Tag item="Value1"/>
  <Tag item="Value2"/>
  <Tag item="Value3"/>
</xml>

Ensuite, si je recharge le fichier par la procédure LoadFromFile, je peux en connaître les nœuds fils.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
procedure TForm1.Button2Click(Sender: TObject);
Var
  nodeDoc,node : IXMLNode;
  i : integer;
begin
   xml.LoadFromFile('c:\temp\test.xml');
  nodeDoc := Xml.DocumentElement;
  ShowMessage(nodeDoc.LocalName+', '+IntToStr(Xml.DocumentElement.ChildNodes.count)+' éléments'); 
  for i := 0 to Xml.DocumentElement.ChildNodes.count-1 do
  Begin
    node := Xml.DocumentElement.GetChildNodes[i];
    ShowMessage(node.NodeName);
  End;
end;
Voici ce qu'on obtient en sortie :
"xml, 3 éléments"
"Tag"
"Tag"
"Tag"

Ce qui est correct.

PROBLÈME : si je n'appelle pas la procédure xml.loadFromFile, cela ne fonctionne pas, voici ce que j'obtiens :
"xml, 10 éléments"
"#text"
"#text"
"Tag"
"#text"
"#text"
"Tag"
"#text"
"#text"
"#Tag"
"#text"

Pourquoi le résultat est-il différent ? Pourquoi je lis des "#text" alors que je ne les lis pas lorsque je charge le fichier ?
Si cela indique que le texte du tag est vide, pourquoi cela apparaît uniquement ici et pourquoi il y en a autant, puisqu'on ne peut avoir qu'un seul champ texte par tag non ?

Bien sûr ce que je cherche c'est à ne pas passer par un fichier intermédiaire.
Pour mon application, je souhaiterais pouvoir relire le fichier juste après avoir écrit dedans.
Merci