Je suis nouveau à Delphi et maintenant je dois lire créer un XML. Mon code est le suivant:
function foo.createXMLDocument(): TXMLDocument;
var
res: TXMLDocument;
rootNode: IXMLNode;
sl : TStringList;
begin
res := TXMLDocument.Create(nil);
res.Active := true;
rootNode := res.AddChild('label');
// create string for debug purposes
sl := TStringList.Create;
sl.Assign(res.XML);// sl is empty after this assignment
//add more elements
generateDOM(rootNode);
Result := res;
end;
3 Réponses :
Dans ma mise en œuvre similaire, je déclare restant comme ixmldocument au lieu de txmldocument.
Bien que ce soit la bonne chose à faire lors de l'instancitation d'un txmldocument sans composant propriétaire, il n'est pas pertinent du problème à la main.
the Aide Delphi de TXMLDOCument.AddChold Méthode (AT le fond): p>
Remarque: N'appelez pas AddChild pour ajouter un enfant à l'élément de document de ce document. Lors de l'ajout de données au document XML, utilisez la méthode AddChild de l'élément de document ou du nœud de la hiérarchie qui devrait être le parent du nouveau nœud. P> blockQuote>
Et c'est ce que vous faites bien? : -) p>
Voici un article d'introduction sur Programmation de document Delphi XML et montre comment vous pouvez Travaillez avec la propriété TXMLDOCument.DocumentElement au lieu de votre définition de la variable RootNode dans votre code. P>
L'introduction que vous citez ne pas démontrer comment créer un nouveau document à partir de zéro. La page d'aide ne fait pas non plus. Comment le code de la question devrait-il changer pour le faire correctement?
Dans D2007 TXMLDOCument.AddChild crée la documentation N'est pas déjà là et appelle son addChild. Donc ce n'est pas le problème.
Erwin, vous éditer votre réponse, mais je ne pense pas que vous avez répondu à mon commentaire.
Ce n'était pas exactement ce que je cherchais, mais le lien vers l'aide était extrêmement utile car je n'ai accès qu'à la version allemande de l'aide Delphes et je cherchais la version anglaise en ligne.
Disclaimer: Testé avec D2007.
Votre code crée effectivement le xml strud> ( Mais il appelle à un pourquoi? strong> Voir les solutions ci-dessous strong>: p> <étiquette /> code>) comme indiqué dans cette fonction modifiée: p>
- Vous n'avez pas besoin d'une variable RES locale, utilisez simplement le résultat.
- Vous n'avez pas besoin d'une llemité supplémentaire pour voir le XML: résultat.xml.text
- N'oubliez pas de
- Le XMLDocument que vous revenez est inutilisable en dehors de la fonction et donne un AV si vous essayez strong>. p>
C'est parce qu'un XMLDocument est destiné à être utilisé comme composant
Le fait que vous utilisiez une interface pour maintenir Rootnode le fait détruire à la fin de la fonction CreeExMldocument. Et si vous regardez le code dans txmlnode._release code>, vous verrez que cela déclenche txmldocument._release code> qui appelle détruire sauf s'il y a un propriétaire pour le xmldocument (ou Interface tenant une référence à celle-ci).
C'est pourquoi le xmldocument est valide et peuplé à l'intérieur de la fonction CreeExMldocument, mais
Serait bon si vous avez fourni la version Delphi que vous utilisez. Voir ma réponse en cas de D2007.