Problem beim Erstellen eines XML-Dokuments mit TXMLDocument

8

Ich bin neu in Delphi und jetzt muss ich ein XML erstellen. Mein Code ist folgender:

%Vor%

Das Problem ist, dass die Anzahl der untergeordneten Knoten zunimmt, aber res.XML leer ist. Ganz zu schweigen davon, dass der Rest der Elemente in der generateDOM-Prozedur nichts zu tun scheint. Ich werde mich sehr über deine Hilfe freuen.

    
Sambatyon 07.10.2009, 15:27
quelle

3 Antworten

12

Haftungsausschluss: Getestet mit D2007.

Ihr Code erstellt in der Tat das XML ( <label/> ) wie in dieser modifizierten Funktion gezeigt:

%Vor%

Aber es erfordert eine Menge Bemerkungen:
- Sie benötigen keine lokale Res-Variable, verwenden Sie einfach das Ergebnis.
- Sie benötigen keine zusätzliche StringList, um das XML zu sehen: Result.Xml.Text
- Vergessen Sie nicht Free die sl StringList, wenn Sie eine erstellen.
- Das von Ihnen zurückgegebene XmlDocument kann außerhalb der Funktion nicht verwendet werden und gibt einen AV aus, wenn Sie versuchen.

Warum?
Dies liegt daran, dass ein XMLDocument andernfalls als Komponente mit einem Eigentümer oder als Schnittstelle verwendet werden soll, um seine Lebensdauer zu verwalten.
Die Tatsache, dass Sie ein Interface verwenden, um rootNode zu speichern, führt dazu, dass es am Ende der CreateXmlDocument-Funktion zerstört wird. Und wenn Sie sich den Code in TXMLNode._Release ansehen, sehen Sie, dass er TXMLDocument._Release auslöst, was Destroy aufruft, es sei denn, es gibt einen Besitzer für das XMLDocument (oder eine Schnittstelle, die einen Verweis darauf enthält).
Aus diesem Grund ist das XMLDocument gültig und in der CreateXMLDocument-Funktion enthalten, aber nicht verfügbar, es sei denn, Sie geben eine Schnittstelle zurück oder stellen einen Eigentümer bereit .

Siehe alternative Lösungen unten :

%Vor%     
François 08.10.2009, 00:32
quelle
4

Die Delphi-Hilfe der TXMLDocument.AddChild-Methode sagt (ganz unten):

  

Hinweis: Rufen Sie AddChild nicht auf, um dem Dokumentelement dieses Dokuments ein untergeordnetes Element hinzuzufügen. Verwenden Sie beim Hinzufügen von Daten zum XML-Dokument die AddChild-Methode des Dokumentelements oder des Knotens in der Hierarchie, der das übergeordnete Element des neuen Knotens sein soll.

Und das machst du richtig? : -)

Hier finden Sie einen Artikel über Delphi XML Document Programming und zeigen, wie Sie mit dem TXMLDocument.DocumentElement arbeiten können property anstelle der Definition der rootnode-Variable in Ihrem Code.

    
Erwin 07.10.2009 17:04
quelle
2

In meiner ähnlichen Implementierung deklariere ich res als IXMLDocument anstelle von TXMLDocument.

%Vor%     
J__ 07.10.2009 16:02
quelle

Tags und Links