Entwickler-Ecke
Dateizugriff - XML Dokument IXMLDOMDocument zur Laufzeit erzeugen??
JustQt - Mi 22.10.03 10:27
Titel: XML Dokument IXMLDOMDocument zur Laufzeit erzeugen??
Hi,
ich hab ein kleines Problem.
Ich habe ein Programm, das ein XML Dokument in ein anderes XML Dokument konvertiert.
Bei einem neuen ist das auch kein Problem, das funktioniert.
Allerdings soll die Erweiterung jetzt eine bestimmte Anzahl (UserEingabe) neuer XML Docs generieren. Dazu müßte ich allerdings mein neues IXMLDOMDocument zur Laufzeit erzeugen, z.B:
Delphi-Quelltext
1: 2:
| for i := 1 to UserEingabeAnzahl do generateNewXMLDocs (XMLDoc+i : IXMLDOMDocument ); |
=> XMLDoc1, XMLDoc2, XMLDoc3, etc...
oder so ähnlich. So funktioniert das natürlich nicht, weil ich meine IXMLDOMDocument Variable oben bei den vars angeben müßte. Das geht aber nunmal auch wieder nicht, weil ich nicht weiß, wieviele neue XMLDocs ich brauche.
Wäre für Hilfe sehr dankbar!
ciao,
Jennifer
Moderiert von
Tino: Delphi-Tags hinzugefügt.
Delete - Mi 22.10.03 11:24
Vielleicht hilft dir ein dynamisches Array weiter:
Delphi-Quelltext
1: 2:
| var DOMDocs : array of DOMDocument40; |
Das lässt sich zur Laufzeit vergrößern:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| SetLength(DOMDocs,0);
SetLength(DOMDocs,1); DOMDocs[0] := CoDOMDocument40.Create; |
Du solltest es beim Beenden nur wieder freigeben:
btw: Ich weiß nicht, womit du arbeitest. Der Beispielaufruf zum Erzeugen stammt direkt aus der Typbibliothek des MS-XML-Parsers. Ggf. musst du das Erzeugen durch den von dir gewünschten Befehl ersetzen.
JustQt - Mi 22.10.03 11:35
Titel: ...
Hi,
ja, an ein Array hatte ich auch schon gedacht...
Ich arbeite mit der MSXML2_TLB.pas
mein Aufruf wäre dann idealerweise:
newXMLDoc[0] := IXMLDOMDocument.Create();
Allerdings gibt es keine Create() Funktion :?
ciao,
Jennifer
barfuesser - Mi 22.10.03 11:53
Wie wärs mit TXMLDocument?
barfuesser
Delete - Mi 22.10.03 13:07
Gibt´s nicht bei Delphi 5, @barfuesser.
@JustQt: Hast du schon mal mit dem XML-Parser von Microsoft gearbeitet? MSXML2_TLB wird die Unit grundsätzlich genannt, was aber verwirrend ist (IMHO). Darum habe ich 3 Units: MSXML2_TLB, MSXML3_TLB und MSXML4_TLB. Kann man erraten, welche Unit für welche XML-Version ist? ;) Egal. Mein Aufrufbeispiel galt speziell für XML 4, im Prinzip lässt du aber nur die Nummer weg:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| DOMDocs[0] := CoDOMDocument.Create; if(DOMDocs[0] <> nil) then try finally DOMDocs[0] := nil; end; |
Du könntest ja mal einen Blick in die XML-
Tutorials [
http://www.delphi-forum.de/viewforum.php?f=14] werfen.
JustQt - Do 23.10.03 11:41
Titel: ...
Hi,
ja, ich habe diesen MS Parser MSXML2_TLB.
Also, jedenfalls, ich hab's jetzt etwas anders gelöst.
Ich lege mir ein neues xmldoc an:
myDoc := CoDOMDocument.Create;
dann schreib ich kram rein und speichere es unter
myDoc_1.xml
myDoc_2.xml
etc...
Also ich benutze quasi die gleiche Instanz, die ich vor meiner Schleife einmal erzeuge, nur speichere ich sie unter unterschiedlichen Namen. :roll: Hoffe das ist jetzt richtig ausgedrückt.
Jetzt habe ich nur das Problem, das er den Kram den er im ersten gespeicherten Doc hatte auch in die darauffolgenden schreibt, also quasi die neuen Knoten anhängt.
Habe auch schon versucht in jeder Schleife mein myDoc neu zu erzeugen, aber da zickt er rum, weil es ja im speicher noch existiert. :?
hab's schon mit
zähler := 0;
schleife begin
erzeugen
reinschreiben
speichern_zähler.xml
myDoc := nil;
inc(zähler);
schleife end;
*grob abgekürzt* :wink:
probiert um das doc irgendwie zu leeren, aber das will er nicht. Gibt's da irgendwas anderes, was ich machen kann, so in der Art??
Danke im Vorraus!
Jennifer
JustQt - Do 23.10.03 13:46
Titel: ...
:beer:
Es geht!!!
zähler := -1;
Schleife begin;
inc(zähler);
mydoc := CoDOMDocument.Create;
reinschreiben
speichern_zähler.xml
mydoc.loadXML(''); // löscht alles aus dem mydoc
Schleife end;
Yippiehhhh! :dunce:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!