uses
XMLDoc, XMLIntf;
{ 写入XML内容 }
var
XMLDoc : TXMLDocument;
Node1 : IXMLNode;
Node2 : IXMLNode;
begin
XMLDoc := TXMLDocument.Create(nil);
try
XMLDoc.Active := True;
XMLDoc.Version := '1.0';
XMLDoc.Encoding := 'GB2312';
XMLDoc.Options := [doNodeAutoCreate,doNodeAutoIndent,doAttrNull,doAutoPrefix,doNamespaceDecl];
XMLDoc.DocumentElement := XMLDoc.CreateNode('ReportObjectContent');
Node1 := XMLDoc.DocumentElement;
Node1 := Node1.AddChild('ReportObjectProperty');
Node2 := Node1.AddChild('ReportName');
Node2.SetAttributeNS('Value', '', ReportName);
Node2 := Node1.AddChild('ReportType');
Node2.SetAttributeNS('Value', '', ReportType);
Node2 := Node1.AddChild('DataViewName');
Node2.SetAttributeNS('Value', '', DataViewName);
Node2 := Node1.AddChild('SQLStr');
Node2.SetAttributeNS('Value', '', SQLStr);
XMLDoc.SaveToStream(Stream);
finally
XMLDoc.Free;
end;
end;
{ 读取XML }
var
XML : TXMLDocument;
Node1 : IXMLNode;
DocIntf : IXMLDocument;
begin
XML := TXMLDocument.Create(nil);
DocIntf := XML; //防止接口被自动释放,少了这一句会发生AV
try
XML.LoadFromStream(Strem);
XML.Active := True;
{ 读ReportObject属性 }
Node1 := XML.DocumentElement.ChildNodes.FindNode('ReportObjectProperty');
ReportName := Node1.ChildNodes.FindNode('ReportName').GetAttributeNS('Value', '');
ReportType := Node1.ChildNodes.FindNode('ReportType').GetAttributeNS('Value', '');
DataViewName := Node1.ChildNodes.FindNode('DataViewName').GetAttributeNS('Value', '');
SQLStr := Node1.ChildNodes.FindNode('SQLStr').GetAttributeNS('Value', '');
finally
XML := nil;
DocIntf := nil;
end;
end;