constructor TSAXParser.Create(AOwner: TComponent); begin inherited Create(AOwner); FLine := 0; FColumn := 0; FAttributeList := TSXPAttributeList.Create; // create an instance of the Reader COM object FReader := CreateComObject(CLASS_SAXXMLReader) as ISAXXMLReader; // instantiate the handler classes FErrorHandler := TSAXErrorHandler.Create; FLexicalHandler := TSAXLexicalHandler.Create; FContenthandler := TSAXContentHandler.Create; FDTDHandler := TSAXDTDHandler.Create; FDeclHandler := TSAXDeclhandler.Create; FContentHandler.FDocumentLocator := Nil; // Handlers need a reference pointing back to us // because they will continually update // our Line and Column properties on each event FLexicalhandler.SAXParser := Self; FContenthandler.SAXParser := Self; FDTDHandler.SAXParser := Self; FDeclHandler.SAXParser := Self; // pass the handler implementations to the reader FReader.putErrorHandler(FErrorhandler); FReader.putContentHandler(FContentHandler); FReader.putDTDHandler(FDTDHandler); Freader.putProperty('http://xml.org/sax/properties/lexical-handler', FLexicalhandler as ISAXLexicalHandler); Freader.putProperty('http://xml.org/sax/properties/declaration-handler', FDeclhandler as ISAXdeclHandler); end;
Example 3: Constructor of TSAXParser instantiates the reader and the handler classes, and passes the handlers to the readers.