type
TArrayWithXML = class(TMtsAutoObject, IArrayWithXML)
private
Owner:TComponent;
myxmldoc:Txmldocument;
myxmlNode:Ixmlnode;
insertnode:Ixmlnode;
protected
procedure Add(const fieldName, fieldValue: WideString); safecall;
procedure GetByIndex(index: Integer; out fieldName,
fieldValue: WideString); safecall;
function GetByFieldName(const fieldName: WideString): WideString; safecall;
procedure SetValue(const inData: WideString); safecall;
function GetValue: WideString; safecall;
function GetNodeCount: Integer; safecall;
procedure Clear; safecall;
{ Protected declarations }
public
procedure Initialize;override;
destructor Destroy;override;
procedure OnActivate;override;
end;
implementation
uses ComServ, SysUtils;
procedure TArrayWithXML.Add(const fieldName, fieldValue: WideString);
begin
try
self.insertnode := self.myxmlNode.AddChild(LowerCase(fieldName));
self.insertnode.Text := fieldValue;
except
raise exception.Create('Error in Add to XML!向XML添加数据错误!');
end;
end;
procedure TArrayWithXML.GetByIndex(index: Integer; out fieldName,
fieldValue: WideString);
begin
try
self.insertnode := self.myxmlNode.ChildNodes.Get(index);
fieldName := self.insertnode.NodeName;
fieldValue := self.insertnode.NodeValue;
except
raise exception.Create('Error in GetByIndex!从XML中读数据错误!');
end;
end;
function TArrayWithXML.GetByFieldName(
const fieldName: WideString): WideString;
begin
result := self.myxmlNode.ChildNodes[LowerCase(fieldName)].Text;
end;
function TArrayWithXML.GetValue: WideString;
begin
result := self.myxmldoc.XML.Text;
end;
function TArrayWithXML.GetNodeCount: Integer;
begin
result := myxmlnode.ChildNodes.Count;
end;
destructor TArrayWithXML.Destroy;
begin
Owner.Free;
inherited;
end;
procedure TArrayWithXML.Initialize;
begin
inherited;
Owner := TComponent.Create(nil);
self.myxmldoc := Txmldocument.Create(self.Owner);
with myxmldoc.XML do
begin
add('<?xml version="1.0" encoding="gb2312"?>');
add('<VariantArray></VariantArray>');
end;
myxmldoc.Active := true;
myxmlnode := myxmldoc.DocumentElement;
self.Pooled := true;
end;
procedure TArrayWithXML.Clear;
begin
self.myxmldoc.XML.Clear;
with myxmldoc.XML do
begin
add('<?xml version="1.0" encoding="gb2312"?>');
add('<VariantArray></VariantArray>');
end;
myxmldoc.Active := true;
myxmlnode := myxmldoc.DocumentElement;
end;
procedure TArrayWithXML.OnActivate;
begin
inherited;
self.Clear;
end;