| Autor |
Beitrag |
Schumi
      
Beiträge: 33
Win XP, Linux
D7 Prof., D2006 Entpr.
|
Verfasst: Di 24.05.05 08:38
Hallo zusammen,
habe eine Frage zu der Erzeugung einer XML-Datei. Der folgende Code erzeugt eine XML-Datei wie gewünscht.
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 Initialisierung; var logfile : string; xmldoc : IXMLDocument; datei : IXMLNode; elem : IXMLNode; begin logfile:='C:\Fortras6-Import.log';
xmldoc:=NewXMLDocument;
datei:=xmldoc.AddChild('Datei');
datei:=xmldoc.ChildNodes['Datei'].AddChild('Kd-Nummer'); datei.Text:='0000008'; datei:=xmldoc.ChildNodes['Datei'].AddChild('Datum'); datei.Text:='2005-05-23'; datei:=xmldoc.ChildNodes['Datei'].AddChild('Kommentar'); datei.Text:='Konvertierte Datei';
elem:=xmldoc.ChildNodes['Datei'].AddChild('Auftrag'); elem:=xmldoc.ChildNodes['Datei'].ChildNodes['Auftrag'].AddChild('Kopf');
elem:=xmldoc.ChildNodes['Datei'].ChildNodes['Auftrag'].ChildNodes['Kopf'].AddChild('Auftrag-Nr'); elem.Text:='123456'; elem:=xmldoc.ChildNodes['Datei'].ChildNodes['Auftrag'].ChildNodes['Kopf'].AddChild('Liefertermin'); elem.Text:='01.06.05';
xmldoc.SaveToFile('C:\test.xml');
end; |
Heraus kommt folgende XML-Datei:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| <?xml version="1.0"?> <Datei> <Kd-Nummer>0000008</Kd-Nummer> <Datum>2005-05-23</Datum> <Kommentar>Konvertierte Datei</Kommentar> <Auftrag> <Kopf> <Auftrag-Nr>123457</Auftrag-Nr> <Liefertermin>02.06.05</Liefertermin> </Kopf> </Auftrag> </Datei> |
Das ist soweit genau das, was ich auch haben möchte. Aber wie füge ich jetzt einen weiteren Auftrag mit dem gleichen Tag <Auftrag> ... </Auftrag> ein? Trage ich auf gleiche Weise wie oben einen zusätzlichen Auftrag ein, werden die alten Werte überschrieben!
Vielen Dank für eure Hilfe!
|
|
Grendel
      
Beiträge: 443
Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
|
Verfasst: Di 24.05.05 08:53
Wieso probierst Du es nicht einfach aus? Dürfte kaum länger dauern als hier anzufragen.
Wie auch immer. Ja, Du fügst weitere Knoten genau so an wie die bisherigen. Und nein, es wird dabei nichts überbügelt.
Bis neulich ...
|
|
Schumi 
      
Beiträge: 33
Win XP, Linux
D7 Prof., D2006 Entpr.
|
Verfasst: Di 24.05.05 09:05
Hallo Grendel,
ich habe es bereits auf verschiedene Art und Weise probiert. Unter anderem auch genau so, wie der erste "Auftrag" eingetragen wurde. Mit dem Erfolg, dass ich nur einen, nämlich den zweiten Datensatz in der fertigen Datei habe.
Vielleicht habe ich mich auch ein wenig falsch ausgedrückt, die Tags für die einzelnen Aufträge sind immer gleich, also
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| . . . <Auftrag> <Kopf> <Auftrag-Nr>123445</Auftrag-Nr> <Liefertermin>02.06.05</Liefertermin> </Kopf> </Auftrag> <Auftrag> <Kopf> <Auftrag-Nr>123457</Auftrag-Nr> <Liefertermin>25.07.05</Liefertermin> </Kopf> </Auftrag> . . . |
|
|
Grendel
      
Beiträge: 443
Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
|
Verfasst: Di 24.05.05 09:12
Schon klar, daß die Tags gleich sein sollen aber ich versteh das Problem trotzdem nicht.
Du kannst an den Root-Knoten so viele Auftrags-Knoten hängen wie Du willst.
Zeig mal Deinen Code, der nicht das gewünschte Ergebnis bringt.
Bis neulich ...
|
|
Schumi 
      
Beiträge: 33
Win XP, Linux
D7 Prof., D2006 Entpr.
|
Verfasst: Di 24.05.05 09:22
|
|
Grendel
      
Beiträge: 443
Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
|
Verfasst: Di 24.05.05 09:32
Ja is klar. Das Problem ist, daß Du die ChildNodes über die Namen ansprichst.
Wenn es unterhalb von "Datei" mehrere "Auftrag" gibt liefert das hier:
Delphi-Quelltext 1:
| xmldoc.ChildNodes['Datei'].ChildNodes['Auftrag']... |
immer nur den ersten.
Mach in etwa so (ungetestet):
Das hier:
elem:=xmldoc.ChildNodes['Datei'].AddChild('Auftrag'); weist "elem" ja den neuen Knoten "Auftrag" zu.
anstatt:
Delphi-Quelltext 1:
| xmldoc.ChildNodes['Datei'].ChildNodes['Auftrag'].AddChild('Kopf'); |
kannst Du über "elem" gehen. Also so:
Delphi-Quelltext 1: 2:
| elem := xmldoc.ChildNodes['Datei'].AddChild('Auftrag'); elem.AddChild('Kopf'); |
Dann mach auch die Zuweisung an "elem" Sinn, da es sonst niemals gebraucht wird.
Bis neulich ...
|
|
Schumi 
      
Beiträge: 33
Win XP, Linux
D7 Prof., D2006 Entpr.
|
Verfasst: Mi 25.05.05 10:28
Hallo Grendel,
damit hast Du mir sehr auf die Sprünge geholfen!
Vielen Dank!
|
|