create xml [gelöst danke Theo]

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

create xml [gelöst danke Theo]

Beitrag von exc-jdbi »

Guten Abend Community

Irgendwie blicke ich da nicht ganz durch.
Es kommt einfach nicht das heraus, was ich brauche. (siehe Bild)

Ich habs auch schon ein paarmal umgestellt. Jedoch das Element 'Adressen' wird mir immer ganz nach unten verschoben.
Wo liegt auch der Fehler?

Code: Alles auswählen

 
class function tClass1.createXml(): Boolean;
var aa1:integer=0;
    intRnd:integer;
    xmlDoc: TXMLDocument;
    RootNode, parentNode, nofilho: TDOMNode;
begin
  Randomize;
  try
    xmlDoc:=tXmlDocument.Create ;
    // Erzeuge einen Wurzelknoten
    RootNode := xmlDoc.CreateElement('Mitglieder');
    xmlDoc.Appendchild(RootNode);
 
    for aa1:=0 to 1 do
    begin
      // Create a parent node
      RootNode:= xmlDoc.DocumentElement;          //Hier muss irgendwo der Fehler liegen
      parentNode := xmlDoc.CreateElement('Adressen');
      RootNode.Appendchild(parentNode);
 
      // Create a child node
      parentNode := xmlDoc.CreateElement('ID');
      nofilho := xmlDoc.CreateTextNode(intToStr(aa1+1));
      parentNode.Appendchild(nofilho);
      RootNode.ChildNodes.Item[0].AppendChild(parentNode);
 
      // Create a child node
      parentNode := xmlDoc.CreateElement('Anrede');     
      nofilho := xmlDoc.CreateTextNode('Herr');
      parentNode.Appendchild(nofilho);
      RootNode.ChildNodes.Item[0].AppendChild(parentNode);
 
      parentNode := xmlDoc.CreateElement('Vorname');
      nofilho := xmlDoc.CreateTextNode('Vorname'+intToStr(aa1) );
      parentNode.Appendchild(nofilho);
      RootNode.ChildNodes.Item[0].AppendChild(parentNode);
 
      .........
 
      .........
 
      parentNode := xmlDoc.CreateElement('Beruf');
      nofilho := xmlDoc.CreateTextNode('Beruf'+intToStr(aa1) );
      parentNode.Appendchild(nofilho);
      RootNode.ChildNodes.Item[0].AppendChild(parentNode);
    end;
    writeXMLFile(xmlDoc, 'test.xml');
  finally
    xmlDoc.Free;
  end;
end;   
 
So brauche ich das xmlDocument.

Code: Alles auswählen

 
<?xml version="1.0" encoding="utf-8"?>
<Mitglieder>
  <Adressen>
    <ID>1</ID>
    <Anrede>Herr</Anrede>
    <Vorname>Vorname0</Vorname>
    <Nachname>Nachname0</Nachname>
    <Strasse>Strasse 298</Strasse>
    <Plz>8790</Plz>
    <Ort>Ortschaft0</Ort>
    <Alter>76</Alter>
    <Beruf>Beruf0</Beruf>
  </Adressen>
  <Adressen>
    <ID>2</ID>
    <Anrede>Herr</Anrede>
    <Vorname>Vorname1</Vorname>
    <Nachname>Nachname1</Nachname>
    <Strasse>Strasse 582</Strasse>
    <Plz>5012</Plz>
    <Ort>Ortschaft1</Ort>
    <Alter>32</Alter>
    <Beruf>Beruf1</Beruf>
  </Adressen>
</Mitglieder>
 
[/size]

Gibt es in Lazarus die Möglichkeit den Dokumententyp statt 'utf8' auf 'standalone' zu setzen?

Code: Alles auswählen

 
<?xml version="1.0" standalone="yes"?>
 

Danke für die Hilfe


Freundliche Grüsse

exc-jdbi
Dateianhänge
Das Dokument wird im Moment so ausgegeben
Das Dokument wird im Moment so ausgegeben
Zuletzt geändert von exc-jdbi am Mo 18. Aug 2014, 13:55, insgesamt 2-mal geändert.

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: create xml

Beitrag von theo »

Sieht ziemlich chaotisch aus. Ich verstehe gar nicht, was du da machst.
Du überschreibst dauernd den Parentnode, dabei würde der besser für jeweils einen Adresseintrag stehen.
Denk nochmal nach.

exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

Re: create xml

Beitrag von exc-jdbi »

Hallo Theo

Danke für die Antwort.

Es ist genau das Beispiel von Wiki
http://wiki.freepascal.org/XML_Tutorial/de

Ich glaub ich weiss aber jetzt wo das Problem liegt.


Freundliche Grüsse

exc-jdbi

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: create xml

Beitrag von theo »

exc-jdbi hat geschrieben: Es ist genau das Beispiel von Wiki
Nicht alles was im Wiki steht ist vorbildlich, aber meistens ist es besser als nichts. :wink:
Nochmal nachdenken ist aber immer eine gute Idee.
exc-jdbi hat geschrieben: Ich glaub ich weiss aber jetzt wo das Problem liegt.
Und wo?

exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

Re: create xml

Beitrag von exc-jdbi »

Sorry ich habs jetzt nochmals probiert.

Funktioniert nicht so wie ich das mir vorstelle.

RootNode.Appendchild(xmlDoc.CreateElement('Adressen'));
RootNode.Appendchild(xmlDoc.CreateElement('ID'));
parentNode.Appendchild(xmlDoc.CreateTextNode(intToStr(aa1+1)));
RootNode.ChildNodes.Item[0].AppendChild(parentNode);


Hast du mir einen Tip? Soll ich das Parentnode aus der For-Schleife rausnehmen?

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: create xml

Beitrag von theo »

Bleib doch einfach logisch und hierarchisch und übernimm nicht das Durcheinander vom Wiki:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var Doc: TXMLDocument;
RootNode, ANode, AddrNode, TextNode: TDOMNode;
AStream:TStringStream;
i:integer;
begin
    Doc := TXMLDocument.Create;
    RootNode := Doc.CreateElement('Mitglieder');
    Doc.Appendchild(RootNode);
 
    For i:=0 To 2 do
    begin
     AddrNode := Doc.CreateElement('Adressen');
     RootNode.AppendChild(AddrNode);
 
      ANode := Doc.CreateElement('ID');
      TextNode := Doc.CreateTextNode(intToStr(i));
      ANode.Appendchild(TextNode);
      AddrNode.AppendChild(ANode);
 
      ANode := Doc.CreateElement('Vorname');
      TextNode := Doc.CreateTextNode('Vorname_'+intToStr(i));
      ANode.Appendchild(TextNode);
      Addrnode.AppendChild(ANode);
    end;
 
    AStream:=TStringStream.Create('');
    WriteXMLFile(Doc,AStream);
    ShowMessage(AStream.DataString);
    Astream.free;
    Doc.free;
end;   
 

exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

Re: create xml

Beitrag von exc-jdbi »

danke theo

Jetzt ist es mir so halbwegs klar .. aber ich werde mir das morgen nochmals anschauen müssen.

Nochmals danke für die Hilfe


Freundliche Grüsse

exc-jdbi

Antworten