Relecture document XML erronée juste après la création
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:
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:
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:
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