Home » Tutorials » Third-Party-Komponenten » OpenXML XDOM 4.1

OpenXML XDOM 4.1

DOM erstellen

Beginnen wir damit eine XML Datei zu erstellen.

Auf die Form setzen wir ein TMemo, ein TButton sowie ein TDomImplementation.
Ins Button1Click schreiben wir:

procedure TForm1.Button1Click(Sender: TObject);
var
  FDoc: TDomDocument;
  FNodeElement: TDomElement;
  FNodeText: TDomText;
  FNodeComment: TDomComment;
begin
  FDoc := TDomDocument.Create(DomImplementation1);

end;

Damit erstellen wir ein neues DomDocument.
Jetzt müssen wir unseren RootNode erstellen:

 FNodeElement := TDomElement.Create(FDoc, 'RootNode');
  FDoc.AppendChild(FNodeElement);

Wir erstellen einen weiteren Knoten als Child:

 FNodeElement := TDomElement.Create(FDoc, 'NodeGroup');
  FDoc.FindFirstChildElement.AppendChild(FNodeElement);

FDoc.FindFirstChildElement gibt uns den ersten ChildNode, also hier den RootNode zurück.
Und noch ein Knoten als dessen Child:

 FNodeElement := TDomElement.Create(FDoc, 'Node1');
  FDoc.FindFirstChildElement.ChildNodes.Item(0).AppendChild(FNodeElement);

ChildNodes.Item(0) gibt uns ebenfalls den ersten ChildNode zurück. Auch wenn es nur einen ChildNode gibt muss man ihn mit Item(0) angeben.
Der Node hätte sich Beispielsweise auch über FindFirstChildElement.FindFirstChildElement ansprechen lassen.
Diesem Knoten fügen wir nun Text hinzu:

 FNodeText := TDomText.Create(FDoc);
  FNodeText.NodeValue := 'Text1';
  FDoc.FindFirstChildElement.ChildNodes.Item(0).FindFirstChildElement.AppendChild(FNodeText);

In der XML-Datei wird dies dann so aussehen Text1.
Jetzt machen wir noch einen zweiten Knoten in unsere NodeGroup und fügen Text hinzu:

 FNodeElement := TDomElement.Create(FDoc, 'Node2');
  FDoc.GetElementsByTagName('NodeGroup').Item(0).AppendChild(FNodeElement);

  FNodeText := TDomText.Create(FDoc);
  FNodeText.NodeValue := 'Text2';
  FDoc.GetElementsByTagName('Node2').Item(0).AppendChild(FNodeText);

GetElementsByTagName(‚NodeGroup‘).Item(0) gibt uns das erste Element mit dem Namen ‚NodeGroup‘ zurück. Auch wenn es nur ein Element mit diesem Namen gibt muss man es mit Item(0) ansprechen.
Das Zuweisen von Attributen geht ganz einfach:

FDoc.FindFirstChildElement.SetAttribute('Attr1', 'Wert1');

So haben wir unserem RootNode ein Attribut gegeben.
Dem zweiten Node in unserer NodeGroup fügen wir 2 Attribute zu:

 with TDomElement(FDoc.GetElementsByTagName('NodeGroup').Item(0).ChildNodes.Item(1)) do
  begin
    SetAttribute('Attr2', 'Wert2');
    SetAttribute('Attr3', 'Wert3');
  end;

ChildNodes.Item(1) gibt uns den zweiten Knoten als TDomNode zurück.
Um SetAttribute benutzen zu können, müssen wir es als TDomElement casten.

 FNodeComment := TDomComment.Create(FDoc);
  FNodeComment.NodeValue := 'Kommentar';
  FDoc.FindFirstChildElement.AppendChild(FNodeComment);

Damit haben wir jetzt noch einen Kommentar eingefügt.