⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saxphilo.pas

📁 source code for Marco Cantu s book Delphi 2007 Handbook
💻 PAS
字号:
unit saxphilo;

interface

uses
  xdom, classes, DBClient, SysUtils, StrUtils;

type
  TDataSaxHandler = class (TXmlStandardHandler)
  protected
    stack: TStringList;
    strCurrent: string;
    cds1: TClientDataSet;
  public
    constructor Create(aOwner: TComponent; cds: TClientDataSet); reintroduce;

    function endElement(const sender: TXmlCustomProcessorAgent;
                        const locator: TdomStandardLocator;
                              namespaceURI,
                              tagName: wideString): TXmlParserError; override;
    function PCDATA(const sender: TXmlCustomProcessorAgent;
                    const locator: TdomStandardLocator;
                          data: wideString): TXmlParserError; override;
    function startElement(const sender: TXmlCustomProcessorAgent;
                          const locator: TdomStandardLocator;
                                namespaceURI,
                                tagName: wideString;
                                attributes: TdomNameValueList): TXmlParserError; override;
    destructor Destroy; override;

  end;

implementation

function RemoveWhites (str: WideString): WideString;
var
  i: integer;
begin
  for i := 1 to Length (str) do
    if Ord(str[i]) >= 32 then
      Result := Result + str [i];
  Result := Trim (Result);
end;

{ TDataSaxHandler }

constructor TDataSaxHandler.Create(aOwner: TComponent; cds: TClientDataSet);
begin
  inherited Create (aOwner);
  stack := tstringlist.create;
  cds1 := cds;
end;

destructor TDataSaxHandler.Destroy;
begin
  stack.Free;
  inherited;
end;

function TDataSaxHandler.endElement(const sender: TXmlCustomProcessorAgent;
  const locator: TdomStandardLocator; namespaceURI,
  tagName: wideString): TXmlParserError;
begin
  if tagName = 'ROW' then
    cds1.Post;
  if stack.Count > 2 then
  begin
    cds1.Edit;
    cds1.FieldByName (tagName).AsString := strCurrent;
  end;
  stack.Delete (stack.Count - 1);
  Result := nil;
end;

function TDataSaxHandler.PCDATA(const sender: TXmlCustomProcessorAgent;
  const locator: TdomStandardLocator; data: wideString): TXmlParserError;
begin
  strCurrent := strCurrent + RemoveWhites(data);
  Result := nil;
end;

function TDataSaxHandler.startElement(
  const sender: TXmlCustomProcessorAgent;
  const locator: TdomStandardLocator; namespaceURI, tagName: wideString;
  attributes: TdomNameValueList): TXmlParserError;
begin
  stack.Add (tagName);
  if tagName = 'ROW' then
    cds1.Insert;
  strCurrent := '';
  Result := nil;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -