示例#1
0
/*
 * This function creates and initializes a new instance of parser.
 * It is necessary to allocate the internal structure XMLReaderImpl that
 * will hold the top-level start/end/characters handlers, the pointer to
 * top-level SAX-handler.
 * It will be necessary to convert native SAX handlers calls to 
 * XBinder's ones. 
 */
OSXMLREADER* rtSaxCCreateXmlReader (OSCTXT* pctxt, void* pSaxHandlerData,
                                    CSAX_StartElementHandler  pStartElementProc, 
                                    CSAX_EndElementHandler    pEndElementProc, 
                                    CSAX_CharacterDataHandler pCharactersProc) 
{
   XML_Parser parser = XML_ParserCreate (NULL); /* Create Expat's parser instance */
   XMLReaderImpl* reader;
   
   reader = (XMLReaderImpl*)XML_MemMalloc (parser, sizeof (XMLReaderImpl));
   if (reader == 0) return 0;
   OSCRTLMEMSET (reader, 0, sizeof (XMLReaderImpl));

   reader->pStartElementProc = pStartElementProc;
   reader->pEndElementProc   = pEndElementProc;
   reader->pCharactersProc   = pCharactersProc;
   reader->userData = pSaxHandlerData;

   XML_SetUserData (parser, reader);

   XML_SetElementHandler (parser, 
                          rtSaxCStartElementHandler,
                          rtSaxCEndElementHandler);
   XML_SetCharacterDataHandler (parser, 
                                rtSaxCCharacterDataHandler);
   XML_SetCdataSectionHandler(parser,
                              rtSaxCStartCdataSectionHandler,
                              rtSaxCEndCdataSectionHandler);

   reader->parser = parser;
   reader->reader.pctxt = pctxt;
   return &reader->reader;
}
void * _Expat_XML_MemMalloc(struct ExpatIFace * Self, XML_Parser parser, size_t size)
{
	return XML_MemMalloc(parser, size);
}