试下下面行不行:ParenXMLDocument,OtherXMLDocument:TXMLDocument; Node,ChildNode:IXMLNode; xmlFlowData.Active:=true; xmlFlowData.ChildNodes.Clear; xmlFlowData.Version:='1.0'; xmlFlowData.Encoding:='GB2312'; node:=xmlFlowData.AddChild('父'); if (OtherXMLDocument.Active) and (OtherXMLDocument.ChildNodes.Count>0) then begin ChildNode := OtherXMLDocument.DocumentElement; //注意这里 node.ChildNodes.Add(ChildNode); end;
自己摸索了一下,问题解决. //在指定的结点上添加指定Xml文件的所有结点 Function AddXmlFileToNode(FatherNode :IXMLNode;ChildXmlStr :string;HasFather:Boolean = False):boolean; procedure CopyStrToStream(Str :string;Stream :TMemoryStream); var s :string; begin try s := trim(Str); Stream.Clear; Stream.Position := 0; Stream.Write(s[1],Length(s)); Stream.Position := 0; finally end; end; var ChildXml: IXMLDocument; XmlStream :TMemoryStream; i :integer; ret :boolean; begin try ret := False; XmlStream := nil; try if Trim(ChildXmlStr) = '' then begin ret := true; exit; end; XmlStream := TMemoryStream.Create; CopyStrToStream(ChildXmlStr,XmlStream); ChildXml := TXMLDocument.Create(nil); ChildXml.LoadFromStream(XmlStream); ChildXml.Active := True; if HasFather then begin FatherNode.DOMNode.appendChild(ChildXml.DocumentElement.DOMNode.cloneNode(true)); end else begin for i:=0 to ChildXml.ChildNodes.Count -1 do begin FatherNode.DOMNode.appendChild(ChildXml.ChildNodes[i].DOMNode.cloneNode(true)); end; end; ret := True; except end; finally if XmlStream <> nil then begin xmlstream.Clear; XmlStream.Free; end; ChildXml.Active := False; result := ret; end; end;
Node,ChildNode:IXMLNode; xmlFlowData.Active:=true;
xmlFlowData.ChildNodes.Clear;
xmlFlowData.Version:='1.0';
xmlFlowData.Encoding:='GB2312';
node:=xmlFlowData.AddChild('父');
if (OtherXMLDocument.Active) and (OtherXMLDocument.ChildNodes.Count>0) then
begin
ChildNode := OtherXMLDocument.DocumentElement; //注意这里
node.ChildNodes.Add(ChildNode);
end;
//在指定的结点上添加指定Xml文件的所有结点
Function AddXmlFileToNode(FatherNode :IXMLNode;ChildXmlStr :string;HasFather:Boolean = False):boolean;
procedure CopyStrToStream(Str :string;Stream :TMemoryStream);
var
s :string;
begin
try
s := trim(Str);
Stream.Clear;
Stream.Position := 0;
Stream.Write(s[1],Length(s));
Stream.Position := 0;
finally end;
end;
var
ChildXml: IXMLDocument;
XmlStream :TMemoryStream;
i :integer;
ret :boolean;
begin
try
ret := False;
XmlStream := nil;
try
if Trim(ChildXmlStr) = '' then
begin
ret := true;
exit;
end;
XmlStream := TMemoryStream.Create;
CopyStrToStream(ChildXmlStr,XmlStream);
ChildXml := TXMLDocument.Create(nil);
ChildXml.LoadFromStream(XmlStream);
ChildXml.Active := True;
if HasFather then
begin
FatherNode.DOMNode.appendChild(ChildXml.DocumentElement.DOMNode.cloneNode(true));
end
else
begin
for i:=0 to ChildXml.ChildNodes.Count -1 do
begin
FatherNode.DOMNode.appendChild(ChildXml.ChildNodes[i].DOMNode.cloneNode(true));
end;
end;
ret := True;
except end;
finally
if XmlStream <> nil then
begin
xmlstream.Clear;
XmlStream.Free;
end;
ChildXml.Active := False;
result := ret;
end;
end;