📄 qxmlwriter.pas
字号:
unit QXMLWriter;
{$I QExport4VerCtrl.inc}
interface
uses Classes, QExport4, QExport4Common;
type
TQXMLWriter = class
private
FStream: TStream;
public
constructor Create(AStream: TStream); virtual;
{$IFDEF VCL12}
procedure Write(const WS: AnsiString);
procedure WriteLn(const WS: AnsiString);
function GetStr( GetStrValue : WideString): AnsiString;
{$ELSE}
function GetStr( GetStrValue : WideString): WideString;
procedure Write(const WS: WideString);
procedure WriteLn(const WS: WideString);
{$ENDIF}
procedure CreateProcessingInstruction(Version, Encoding,
Standalone: WideString);
procedure BeginNode(const Name, Text: WideString;
const AttNames, AttValues: array of WideString);
procedure EndNode(Name: WideString; EndLine: Boolean = true);
procedure CreateFullNode(const Name, Text: WideString;
const AttNames, AttValues: array of WideString);
end;
implementation
uses SysUtils;
{ TXMLWriter }
procedure TQXMLWriter.CreateProcessingInstruction(Version, Encoding,
Standalone: WideString);
var
Body: WideString;
begin
Body := '';
if Version <> '' then
Body := Body + Format('version="%s" ', [Version]);
if Encoding <> '' then
Body := Body + Format('encoding="%s" ', [Encoding]);
if Standalone <> '' then
Body := Body + Format('standalone="%s" ', [Standalone]);
WriteLn('<?xml ' + GetStr(Body) + '?>');
end;
{$IFDEF VCL12}
function TQXMLWriter.GetStr( GetStrValue : WideString): AnsiString;
begin
Result := UTF8Encode( GetStrValue);
end;
{$ELSE}
function TQXMLWriter.GetStr( GetStrValue : WideString): WideString;
begin
Result := GetStrValue;
end;
{$ENDIF}
procedure TQXMLWriter.BeginNode(const Name, Text: WideString; const AttNames,
AttValues: array of WideString);
var
i: Integer;
begin
Write('<' + GetStr(Name));
if Length(AttNames) > 0 then Write(' ');
for i := 0 to Length(AttNames) - 1 do
Write( GetStr(AttNames[i]) + '="' + GetStr(AttValues[i]) + '" ');
Write('>' + GetStr(Text));
end;
procedure TQXMLWriter.EndNode(Name: WideString; EndLine: Boolean);
begin
if EndLine then
WriteLn('</' + GetStr(Name) + '>')
else
Write('</' + GetStr(Name) + '>');
end;
procedure TQXMLWriter.CreateFullNode(const Name, Text: WideString;
const AttNames, AttValues: array of WideString);
var
i: Integer;
begin
Write('<' + GetStr(Name));
if Length(AttNames) > 0 then Write(' ');
for i := 0 to Length(AttNames) - 1 do
Write(GetStr(AttNames[i]) + '="' + GetStr(AttValues[i]) + '" ');
if Text <> '' then
Write('>' + GetStr(Text) + '</' + GetStr(Name) + '>')
else
Write('/>');
end;
{$IFDEF VCL12}
procedure TQXMLWriter.Write(const WS: AnsiString);
{$ELSE}
procedure TQXMLWriter.Write(const WS: WideString);
{$ENDIF}
var
str: AnsiString;
begin
{$IFDEF VCL12}
str := AnsiString(WS);
{$ELSE}
{$IFDEF QE_UNICODE}
str := UTF8Encode(WS);
{$ELSE}
str := AnsiString(WS);
{$ENDIF}
{$ENDIF}
FStream.WriteBuffer(str[1], Length(str));
end;
{$IFDEF VCL12}
procedure TQXMLWriter.WriteLn(const WS: AnsiString);
begin
Write(WS + AnsiString(CRLF));
end;
{$ELSE}
procedure TQXMLWriter.WriteLn(const WS: WideString);
begin
Write(WS + CRLF);
end;
{$ENDIF}
constructor TQXMLWriter.Create(AStream: TStream);
begin
inherited Create;
FStream := AStream;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -