procedure Register;
begin
RegisterComponents('Samples', [TXMLDOC]);
end;
{ TXMLDOC }
constructor TXMLDOC.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
//----add your code here ------
FXMLdataset:=TADODataset.Create(self);
FXMLdataset.Close;
FXMLdocument:=CoXMLDocument.Create;
end;
destructor TXMLDOC.Destroy;
begin
//---- add your code here ------
with FXMLdataset do
begin
Close;
Free;
end;
FXMLdocument:=nil;
inherited;
end;
procedure TXMLDOC.inidataset;
var
fieldname:string;
fieldtype:TFieldtype;
fieldwidth:integer;
required:boolean;
temp:string;
tempface:array of IXMLElement2;
tmpface:IXMLElement2;
i,j:integer;
begin
setlength(tempface,FXMLcollumns);
for i:=0 to FXMLcollumns-1 do
begin
tempface[i]:=(FXMLrootelement.children.item(i,NULL)) as IXMLElement2;
fieldname:=tempface[i].getAttribute('name').asstring;
required:=tempface[i].getAttribute('required').asboolean;
fieldwidth:=tempface[i].getAttribute('width').asinteger;
temp:=tempface[i].getAttribute('datatype').asstring;
fieldtype:=mapfieldtype(temp);
FXMLdataset.FieldDefs.Add(fieldname,fieldtype,fieldwidth, required);
end;
for j:=0 to FXMLrows-1 do
begin
for i:=0 to FXMLcollumns-1 do
begin
tmpface:=(tempface[i].children.item(j,NULL)) as IXMLElement2;
FXMLdataset.append;
FXMLdataset.fields[i].value:=tmpface.getAttribute('value');
end;
end;
end;
procedure TXMLDOC.loadxmlfile(filename: string);
var
tmpface:IXMLElement2;
str:widestring;
begin
FXMLfile:=filename;
FXMLdocument.Set_url(filename);
FXMLdocument.Get_root(FXMLrootelement);
FDBtype:=FXMLrootelement.getAttribute('dbtype').asstring;
FXMLdocument.Get_fileSize(str);
FXMLfilesize:=widechartostring(pwidechar(str));
FXMLcollumns:=FXMLrootelement.children.Get_length;
tmpface:=(FXMLrootelement.children.item(0,NULL)) as IXMLElement2;
FXMLrows:=tmpface.children.Get_length;
end;
function TXMLDOC.mapfieldtype(str: string): TFieldtype;
begin
if uppercase(trim(str))='FTUNKNOWN' then
result:=ftUnknown
else if uppercase(trim(str))='FTSTRING' then
result:=ftString
else if uppercase(trim(str))='FTSMALLINT' then
result:=ftSmallint
else if uppercase(trim(str))='FTINTEGER' then
result:=ftInteger
else if uppercase(trim(str))='FTWORD' then
result:=ftWord
else if uppercase(trim(str))='FTBOOLEAN' then
result:=ftBoolean
else if uppercase(trim(str))='FTFLOAT' then
result:=ftFloat
else if uppercase(trim(str))='FTCURRENCY' then
result:=ftCurrency
else if uppercase(trim(str))='FTBCD' then
result:=ftBCD
else if uppercase(trim(str))='FTDATE' then
result:=ftDate
else if uppercase(trim(str))='FTTIME' then
result:=ftTime
else if uppercase(trim(str))='FTDATETIME' then
result:=ftDateTime
else if uppercase(trim(str))='FTBYTES' then
result:=ftBytes
else if uppercase(trim(str))='FTVARBYTES' then
result:=ftVarBytes
else if uppercase(trim(str))='FTAUTOINC' then
result:=ftAutoInc
else if uppercase(trim(str))='FTBLOB' then
result:=ftBlob
else if uppercase(trim(str))='FTMEMO' then
result:=ftMemo
else if uppercase(trim(str))='FTGRAPHIC' then
result:=ftGraphic
else if uppercase(trim(str))='FTFMTMEMO' then
result:=ftFmtMemo
else if uppercase(trim(str))='FTPARADOXOLE' then
result:=ftParadoxOle
else if uppercase(trim(str))='FTDBASEOLE' then
result:=ftDBaseOle
else if uppercase(trim(str))='FTTYPEDBINARY' then
result:=ftTypedBinary
else if uppercase(trim(str))='FTCURSOR' then
result:=ftCursor
else if uppercase(trim(str))='FTFIXEDCHAR' then
result:=ftFixedChar
else if uppercase(trim(str))='FTWIDESTRING' then
result:=ftWideString
else if uppercase(trim(str))='FTLARGEINT' then
result:=ftLargeint
else if uppercase(trim(str))='FTADT' then
result:=ftADT
else if uppercase(trim(str))='FTARRAY' then
result:=ftArray
else if uppercase(trim(str))='FTREFERENCE' then
result:=ftReference
else if uppercase(trim(str))='FTDATASET' then
result:=ftDataSet
else if uppercase(trim(str))='FTORABLOB' then
result:=ftOraBlob
else if uppercase(trim(str))='FTORACLOB' then
result:=ftOraClob
else if uppercase(trim(str))='FTVARIANT' then
result:=ftVariant
else if uppercase(trim(str))='FTINTERFACE' then
result:=ftInterface
else if uppercase(trim(str))='FTIDISPATCH' then
result:=ftIDispatch
else if uppercase(trim(str))='FTGUID' then
result:=ftGuid
else
result:=ftString;
end;
procedure TXMLDOC.setactive(const Value: TActive);
begin
FActive := Value;
end;
procedure TXMLDOC.setdbtype(const Value: TDBtype);
begin
FDBtype := Value;
end;
procedure TXMLDOC.setxmldocument(const Value: IXMLDocument2);
begin
FIXMLDocument := Value;
end;
procedure TXMLDOC.setxmlfile(const Value: string);
begin
FXMLfile := Value;
end;
procedure TXMLDOC.setxmlfilepath(const Value: string);
begin
FXMLfilepath := Value;
end;
procedure TXMLDOC.setxmlrootelement(const Value: IXMLElement2);
begin
FXMLrootelement := Value;
end;