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 :
Ce qui donne ceci :
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;
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.
Voici ce qu'on obtient en sortie :
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;
"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
Partager