Using Content Processor

This section explains how to implement the MContentProcessor interface to parse, validate and autocorrect an XML document.

Introduction

The parsed document can also be validated against a specification and auto-corrected for spelling errors in the validated text. This can be done by writing three applications - a parser, a validator and an autocorrector. These applications must implement the MContentProcessor interface.

Writing a content processor is similar to writing a content handler as explained in Parsing an XML Document. MContentProcessor is an extension of MContentHandler. Each application is writen by implementing the callback functions of MContentHandler. The only difference is that MContentProcessor has a mechanism for directing output, so that the output of the parser is the input to the validator, and the output of the validator is the input to the autocorrector.

Direct output of a content processor by implementing the SetContentSink() function, so that the parser outputs to the validator and the validator outputs to the autocorrector. A sequence of several applications linked in this way is called a Plug-in Chain.

Procedure

  1. Implement the MContentProcessor interface.

  2. Implement the MContentProcessor::SetContentSink() function.

  3. Perform the actual parsing.

    Use a CParser object as explained in Choosing a Parser Plug-in. To ensure that parsing is followed by validation and autocorrection, associate the CParser object with the plug-in chain. This can be done by calling SetProcessorChainL() function of the CParser object with a list of the items in the plugin chain as a parameter.

    The following code illustrates how to validate and autocorrect the parsed document:

    RFs fs;
    User::LeaveIfError( fs.Connect() );
    CleanupClosePushL( fs );
    
    _LIT8( KXmlMimeType, "text/xml" );
    TSimpleContentHandler sax; // You’ll have to implement this class…
    
    CParser* parser = CParser::NewLC( KXmlMimeType, sax );
    
    RContentProcessorUids uids;
    uids.Append( KValidatorUid ); // The ECOM implementation UID of a validator plug-in
    CleanupClosePushL( uids );
    
    // Sets up the chain of call-back events from the parser through to the
    // validating plug-in and then the client.
    parser->SetProcessorChainL( uids );
    
    parser->ParseFileL( fs, KMyFile );
    
    CleanupStack::PopAndDestroy( 3 );