Jelajahi Sumber

* Some small improvements, multiple documents allowed, help message

git-svn-id: trunk@44294 -
michael 5 tahun lalu
induk
melakukan
8e1e9cb20b
1 mengubah file dengan 33 tambahan dan 5 penghapusan
  1. 33 5
      packages/fcl-xml/examples/htmlwithsax.lpr

+ 33 - 5
packages/fcl-xml/examples/htmlwithsax.lpr

@@ -9,8 +9,9 @@ Type
   TMyApp = Class(TCustomApplication)
   TMyApp = Class(TCustomApplication)
   Private
   Private
     Indent : string;
     Indent : string;
-    MyReader : THTMLReader;
+    procedure DoEndDocument(Sender: TObject);
     procedure DoEndElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
     procedure DoEndElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
+    procedure DoFile(const aFileName: String);
     procedure DoStartDocument(Sender: TObject);
     procedure DoStartDocument(Sender: TObject);
     procedure DoStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString; Atts: TSAXAttributes);
     procedure DoStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString; Atts: TSAXAttributes);
   Protected
   Protected
@@ -20,24 +21,45 @@ Type
 
 
 { TMyApp }
 { TMyApp }
 
 
-procedure TMyApp.DoRun;
+procedure TMyApp.DoFile(const aFileName : String);
+
 var
 var
   F : TFileStream;
   F : TFileStream;
+  MyReader : THTMLReader;
+
 begin
 begin
-  StopOnException:=True;
-  Terminate;
-  F:=TFileStream.Create(Params[1],fmOpenRead or fmShareDenyWrite);
+  MyReader:=Nil;
+  F:=TFileStream.Create(aFileName,fmOpenRead or fmShareDenyWrite);
   try
   try
     MyReader:=THTMLReader.Create;
     MyReader:=THTMLReader.Create;
     MyReader.OnStartDocument:=@DoStartDocument;
     MyReader.OnStartDocument:=@DoStartDocument;
     MyReader.OnStartElement:=@DoStartElement;
     MyReader.OnStartElement:=@DoStartElement;
     MyReader.OnEndElement:=@DoEndElement;
     MyReader.OnEndElement:=@DoEndElement;
+    MyReader.OnEndDocument:=@DoEndDocument;
     MyReader.ParseStream(F);
     MyReader.ParseStream(F);
   finally
   finally
+    FreeAndNil(MyReader);
     F.Free;
     F.Free;
   end;
   end;
 end;
 end;
 
 
+procedure TMyApp.DoRun;
+
+var
+  I : Integer;
+
+begin
+  StopOnException:=True;
+  Terminate;
+  if ParamCount<1 then
+    begin
+    Writeln('Usage : ',ExtractFileName(ExeName),' <htmlfile1> [htmlfile2 [htmlfile3]]');
+    Exit;
+    end;
+  for I:=1 to ParamCount do
+      DoFile(Params[i]);
+end;
+
 procedure TMyApp.DoStartDocument(Sender: TObject);
 procedure TMyApp.DoStartDocument(Sender: TObject);
 begin
 begin
   Writeln('Document start');
   Writeln('Document start');
@@ -49,6 +71,12 @@ begin
   Indent:=Copy(Indent,1,Length(Indent)-2);
   Indent:=Copy(Indent,1,Length(Indent)-2);
 end;
 end;
 
 
+procedure TMyApp.DoEndDocument(Sender: TObject);
+begin
+  Writeln('Document end');
+  Indent:='';
+end;
+
 procedure TMyApp.DoStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString; Atts: TSAXAttributes);
 procedure TMyApp.DoStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString; Atts: TSAXAttributes);
 
 
 Var
 Var