Zitat:
Eventuell hätte - ohne die
Unit MSXML2 - auch das hier funktioniert:
siehe Anhang.
und die IXMLNodeCollection-Geschichte funktioniert hier nicht, weil (iXMLNode-Instanz).Collection nil ist oO
ps. ich brauchte einen Export von payload, den ich zwar mit den restlichen Daten importiere, jedoch nicht direkt verwende, aber wieder speichern muss. Damit ich keine TXMLDocument-Instanzen herumschleppen muss, habe ich das Beiwerk als String abgelegt. So bekommt man die mit .XML ausgegebenen strings wieder importiert:
Delphi-Quellcode:
procedure StringToXMLNodes(parent: iXMLNode; str:
String);
var
dummydoc : TXMLDocument;
dummysource : TStringStream;
buffer :
String;
primary : iXMLNode;
OneNode : iXMLNode;
idx : integer;
begin
if str = '
'
then exit;
// wrap content into dummy document
buffer := '
<?xml version="1.0"?>'#13#10'
<sheet>'+str+'
</sheet>';
dummysource := TStringStream.Create(buffer);
dummysource.Seek(0,soFromBeginning);
// use import functionality from this instance
dummydoc := TXMLDocument.Create(Application);
dummydoc.LoadFromStream(dummysource);
// feed the instance
dummydoc.Active := True;
// and activate it
primary := dummydoc.Node.ChildNodes[1];
// just [1]: <sheet>...</sheet>
if assigned(primary)
then
begin
// clone nodes, insert
for idx := 0
to primary.ChildNodes.Count -1
do
begin
OneNode := primary.ChildNodes[idx].CloneNode(true);
parent.ChildNodes.Insert(-1,OneNode);
end;
end;
// clean up
dummydoc.Active := False;
dummydoc.Destroy;
// not sure if this is valid (what does Active=False do?)
dummysource.Destroy;
end;