Hallo PascalDragon,
da hast Du Deinem Namen alle Ehre gemacht! Vielen Dank!
Mit Deinem/Euren Hinweis/Hinweisen habe ich noch weitergegraben und weitere CallBackfunktionen integriert.
Aus meiner Sicht sind die wesentlichen Hürden für die Verwendung des FPC SAX Ansatzes überwunden und ich kann diesen Thread hier erfolgreich schließen.
Vielen Dank nochmal an ale Beteiligten.
Tolle Programmiersprache und super Forum(mitglieder)!
Habt einen schönen Sonntag
Gruß
Helios
Code: Alles auswählen
unit TestMain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, SAX, SAX_XML;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure MyStartDocument(Sender: TObject);
procedure MyEndDocument(Sender: TObject);
procedure MyStartElementEvent(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString; Atts: TSAXAttributes);
procedure MyEndElementEvent(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
procedure MyCharactersEvent(Sender: TObject; const ch: PSAXChar; AStart, ALength: Integer);
procedure MyIgnorableWhitespaceEvent(Sender: TObject; const ch: PSAXChar; AStart, ALength: Integer);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.MyStartDocument(Sender: TObject);
begin
Form1.ListBox1.Items.Add('MyStartDocument');
end;
procedure TForm1.MyEndDocument(Sender: TObject);
begin
Form1.ListBox1.Items.Add('MyEndDocument');
end;
procedure TForm1.MyStartElementEvent(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString; Atts: TSAXAttributes);
begin
Form1.ListBox1.Items.Add('MyStartElementEvent ' + NamespaceURI + ' ' + LocalName + ' ' + QName);
end;
procedure TForm1.MyEndElementEvent(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
begin
Form1.ListBox1.Items.Add('MyEndElementEvent ' + NamespaceURI + ' ' + LocalName + ' ' + QName);
end;
procedure TForm1.MyCharactersEvent(Sender: TObject; const ch: PSAXChar; AStart, ALength: Integer);
begin
//Form1.ListBox1.Items.Add('MyCharactersEvent ' + ch + ' ' + IntToStr(AStart) + ' ' + IntToStr(ALength));
end;
procedure TForm1.MyIgnorableWhitespaceEvent(Sender: TObject; const ch: PSAXChar; AStart, ALength: Integer);
begin
//Form1.ListBox1.Items.Add('MyIgnorableWhitespaceEvent ' + ch + ' ' + IntToStr(AStart) + ' ' + IntToStr(ALength));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
XMLReader: TSAXReader;
fs: TFileStream;
src: TSAXInputSource;
begin
ListBox1.Items.Clear;
if (OpenDialog1.Execute) then
begin
fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
try
src := TSAXInputSource.Create(fs);
try
XMLReader := TSAXXMLReader.Create;
try
XMLReader.OnStartDocument := @MyStartDocument;
XMLReader.OnEndDocument := @MyEndDocument;
XMLReader.OnStartElement := @MyStartElementEvent;
XMLReader.OnEndElement := @MyEndElementEvent;
XMLReader.OnCharacters := @MyCharactersEvent;
XMLReader.OnIgnorableWhitespace := @MyIgnorableWhitespaceEvent;
XMLReader.Parse(src);
//XMLReader:=nil;
finally
XMLReader.Free
end;
finally
src.Free;
end;
finally
fs.Free;
end;
end;
end;
end.
Ein compilier- und ausführbares Projekt für alle die auf das gleiche Problem stoßen werden oder gestoßen sind im Anhang.