如何将数据表内容写进xml文件,格式如下: <?xml version="1.0" encoding="gb2312" ?>
- <data>
- <row>
<ID>1</ID>
<username>小雨</username>
<password>123456</password>
</row>
- <row>
<ID>2</ID>
<username>小雨</username>
<password>123456</password>
</row>
- <row>
<ID>3</ID>
<username>小雨</username>
<password>123456</password>
</row>
</data>
- <data>
- <row>
<ID>1</ID>
<username>小雨</username>
<password>123456</password>
</row>
- <row>
<ID>2</ID>
<username>小雨</username>
<password>123456</password>
</row>
- <row>
<ID>3</ID>
<username>小雨</username>
<password>123456</password>
</row>
</data>
解决方案 »
- delphi 获得cpu硬件信息
- 怎样往数据库的一个Blob字段中追加数据?
- 如何自动产生EXCEL图表
- 有没有压缩率高一点的压缩控件或者函数? Abrravia 的压缩率不高啊。。。
- 如何让TPanel有滚动条?
- 求救拆字
- 三喜临门,散分3000庆祝(之一)
- TClientDataSet.DataSetField怎么用?
- 如何对一个文件进行加密解密???
- 请问如何用Delphi编的软件调用一个外部程序(如记事本),但是软件自身还是处于活动状态?
- DLL注入成功后,请教如何模拟鼠标点击,以及模拟按键!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 2010版 DLL注入后,取字符串问题?
Classes, DB; procedure DatasetToXML(Dataset: TDataset; FileName: string); implementation uses
SysUtils; var
SourceBuffer: PChar; procedure WriteString(Stream: TFileStream; s: string);
begin
StrPCopy(SourceBuffer, s);
Stream.Write(SourceBuffer[0], StrLen(SourceBuffer));
end; procedure WriteFileBegin(Stream: TFileStream; Dataset: TDataset); function XMLFieldType(fld: TField): string;
begin
case fld.DataType of
ftString: Result := "string" WIDTH=" + IntToStr(fld.Size) + ";
ftSmallint: Result := "i4"; //??
ftInteger: Result := "i4";
ftWord: Result := "i4"; //??
ftBoolean: Result := "boolean";
ftAutoInc: Result := "i4" SUBTYPE="Autoinc";
ftFloat: Result := "r8";
ftCurrency: Result := "r8" SUBTYPE="Money";
ftBCD: Result := "r8"; //??
ftDate: Result := "date";
ftTime: Result := "time"; //??
ftDateTime: Result := "datetime";
else
end;
if fld.Required then
Result := Result + required="true";
if fld.Readonly then
Result := Result + readonly="true";
end; var
i: Integer;
begin
WriteString(Stream, +
);
WriteString(Stream, ); {write th metadata}
with Dataset do
for i := 0 to FieldCount-1 do
begin
WriteString(Stream, );
end;
WriteString(Stream, );
WriteString(Stream, );
WriteString(Stream, );
end; procedure WriteFileEnd(Stream: TFileStream);
begin
WriteString(Stream, );
end; procedure WriteRowStart(Stream: TFileStream; IsAddedTitle: Boolean);
begin
if not IsAddedTitle then
WriteString(Stream, end; procedure WriteRowEnd(Stream: TFileStream; IsAddedTitle: Boolean);
begin
if not IsAddedTitle then
WriteString(Stream, />);
end; procedure WriteData(Stream: TFileStream; fld: TField; AString: ShortString);
begin
if Assigned(fld) and (AString <> ) then
WriteString(Stream, + fld.FieldName + =" + AString + ");
end; function GetFieldStr(Field: TField): string; function GetDig(i, j: Word): string;
begin
Result := IntToStr(i);
while (Length(Result) < j) do
Result := 0 + Result;
end; var Hour, Min, Sec, MSec: Word;
begin
case Field.DataType of
ftBoolean: Result := UpperCase(Field.AsString);
ftDate: Result := FormatDateTime(yyyymmdd, Field.AsDateTime);
ftTime: Result := FormatDateTime(hhnnss, Field.AsDateTime);
ftDateTime: begin
Result := FormatDateTime(yyyymmdd, Field.AsDateTime);
DecodeTime(Field.AsDateTime, Hour, Min, Sec, MSec);
if (Hour <> 0) or (Min <> 0) or (Sec <> 0) or (MSec <> 0) then
Result := Result + T + GetDig(Hour, 2) + : + GetDig(Min, 2) + : + GetDig(Sec, 2) + GetDig(MSec, 3);
end;
else
Result := Field.AsString;
end;
end; procedure DatasetToXML(Dataset: TDataset; FileName: string);
var
Stream: TFileStream;
bk: TBook;
i: Integer;
begin
Stream := TFileStream.Create(FileName, fmCreate);
SourceBuffer := StrAlloc(1024);
WriteFileBegin(Stream, Dataset); with DataSet do
begin
DisableControls;
bk := GetBook;
First; {write a title row}
WriteRowStart(Stream, True);
for i := 0 to FieldCount-1 do
WriteData(Stream, nil, Fields[i].DisplayLabel);
{write the end of row}
WriteRowEnd(Stream, True); while (not EOF) do
begin
WriteRowStart(Stream, False);
for i := 0 to FieldCount-1 do
WriteData(Stream, Fields[i], GetFieldStr(Fields[i]));
{write the end of row}
WriteRowEnd(Stream, False); Next;
end; GotoBook(bk);
EnableControls;
end; WriteFileEnd(Stream);
Stream.Free;
StrDispose(SourceBuffer);
end; end.
xml: IXMLDocument;
root, Child1: IXMLNode;
i: Integer;
begin
xml := TXMLDocument.Create(nil);
xml.Active := True;
xml.Version := '1.0';
xml.Encoding := 'gb2312';
root := xml.AddChild('data');
xml.DocumentElement := Root;
for i := 0 to 4 do
begin
child1 := root.AddChild('row');
child1.AddChild('id').Text := IntToStr(i);
child1.AddChild('name').Text := '123';
end;
xml.SaveToFile('c:\aaaa.xml');
end;