Entwickler-Ecke

LCL-Komponenten - XML-Datei erstellen


AlexII - Mo 26.10.20 12:36
Titel: XML-Datei erstellen
Hallo Leute,

ich habe hier ein Beispiel gefunden wie ich eine XML-Datei erstelle, nur ist die zu verschachtelt für mich. Irgendwie stehe ich auf dem Schlauch und verstehe nicht wie ich den Code so modifiziere, dass ich den parent node "usuario" weg habe? Dass die XML am Ende so aussieht?

So wird sie jetzt erstellt:

XML-Daten
1:
2:
3:
4:
5:
6:
<register>
  <usuario>
    <nome>Fernando</nome>
    <idade>32</idade>
  <usuario>
</register>


und das ist mein Ziel:

XML-Daten
1:
2:
3:
4:
<register>
  <nome>Fernando</nome>
  <idade>32</idade>
</register>


Hier mein Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
procedure TForm1.Button3Click(Sender: TObject);
var
  Doc: TXMLDocument;
  RootNode, parentNode, nofilho: TDOMNode;
begin
  try
    Doc := TXMLDocument.Create;

    RootNode := Doc.CreateElement('register');
    Doc.Appendchild(RootNode);
    // Create a parent node
    RootNode:= Doc.DocumentElement;
    parentNode := Doc.CreateElement('usuario');
    RootNode.Appendchild(parentNode);

    // Create a child node
    parentNode := Doc.CreateElement('nome');
    nofilho := Doc.CreateTextNode('Fernando');
    parentNode.Appendchild(nofilho);
    RootNode.ChildNodes.Item[0].AppendChild(parentNode);

    // Create a child node
    parentNode := Doc.CreateElement('idade');
    nofilho := Doc.CreateTextNode('32');
    parentNode.Appendchild(nofilho);
    RootNode.ChildNodes.Item[0].AppendChild(parentNode);

    writeXMLFile(Doc, 'test.xml');
  finally
    Doc.Free;
  end;
end;


Vielen Dank für die Anregungen.


jaenicke - Mo 26.10.20 15:02

Tut mir leid, dass ich so frage, aber hast du den Quelltext aus der Lazarus Doku denn verstanden? Ich meine du erstellst dort ja explizit den Knoten 'usuario' mit Doc.CreateElement('usuario')...

Wenn du den nicht brauchst, warum erstellst du ihn dann statt des Knotens, den du möchtest?


AlexII - Mo 26.10.20 18:27

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Tut mir leid, dass ich so frage, aber hast du den Quelltext aus der Lazarus Doku denn verstanden? Ich meine du erstellst dort ja explizit den Knoten 'usuario' mit Doc.CreateElement('usuario')...

Wenn du den nicht brauchst, warum erstellst du ihn dann statt des Knotens, den du möchtest?


Na ja, das ist ja das gerade, hätte ich den Code verstanden, dann hätte ich das Thema nicht erstellt. Gibt es vielleicht noch irgendwelche Dokus für XML mit Lazarus oder Delphi?


jaenicke - Mo 26.10.20 18:42

Es ist halt recht schwierig etwas dazu zu sagen, wenn du nicht schreibst was du daran nicht verstehst. Denn die Befehle sind eigentlich selbsterklärend, wenn man sie Wort für Wort anschaut...

CreateElement - create element - Erzeuge ein neues Element mit dem angegebenen Namen
AppendChild - append child - Hänge an der Stelle des Aufrufs (Doc.AppendChild --> im Dokument direkt, RootNode.AppendChild --> unter dem Knoten RootNode, ...) ein Element darunter
CreateTextNode - create text node - Erzeuge einen neuen Knoten als reinen Textknoten, sprich nur Textinhalt ohne den Namen eines Knotens
DocumentElement - document element - Das ist der oberste Knoten, hier also register