XML::Filter::Tee.3pm

Langue: en

Autres versions - même langue

Version: 2009-06-11 (ubuntu - 24/10/10)

Section: 3 (Bibliothèques de fonctions)

NAME

XML::Filter::Tee - Send SAX events to multiple processor, with switching

SYNOPSIS

     my $t = XML::Filter::Tee->new(
         { Handler => $h0 },
         { Handler => $h1 },
         { Handler => $h2 },
         ...
     );
 
     ## Altering the handlers list:
     $t->set_handlers( $h0, $h1, $h2, $h3 );
 
     ## Controlling flow to a handler by number and by reference:
     $t->disable_handler( 0 );
     $t->enable_handler( 0 );
 
     $t->disable_handler( $h0 );
     $t->enable_handler( $h0 );
 
     ## Use in a SAX machine (though see L<XML::SAX::Pipeline> and
     ## L<XML::SAX::Tap> for a more convenient way to build a machine
     ## like this):
     my $m = Machine(
         [ Intake => "XML::Filter::Tee" => qw( A B ) ],
         [ A      => ">>log.xml" ],
         [ B      => \*OUTPUT ],
     );
 
 

DESCRIPTION

XML::Filter::Tee is a SAX filter that passes each event it receives on to a list of downstream handlers.

It's like XML::Filter::SAXT in that the events are not buffered; each event is sent first to the tap, and then to the branch (this is different from XML::SAX::Dispatcher, which buffers the events). Unlike XML::Filter::SAXT, it allows it's list of handlers to be reconfigured (via ``set_handlers'') and it allows control over which handlers are allowed to receive events. These features are designed to make XML::Filter::Tee instances more useful with SAX machines, but they to add some overhead relative to XML::Filter::SAXT.

The events are not copied, since they may be data structures that are difficult or impossibly to copy properly, like parts of a C-based DOM implementation. This means that the handlers must not alter the events or later handlers will see the alterations.

METHODS

new
     my $t = XML::Filter::Tee->new(
         { Handler => $h0 },
         { Handler => $h1 },
         { Handler => $h2 },
         ...
     );
 
 
set_handlers
     $t->set_handlers( $h0, $h1, $h2 );
     $t->set_handlers( {
             Handler => $h0,
         },
         {
             Handler => $h1,
         },
     );
 
 

Replaces the current list of handlers with new ones.

Can also name handlers to make enabling/disabling them by name easier:

     $m->set_handlers( {
             Handler => $validator,
             Name    => "Validator",
         },
         {
             Handler => $outputer,
         },
     );
 
     $m->disable_handler( "Validator" );
 
 
disable_handler
     $t->disable_handler( 0 );            ## By location
     $t->disable_handler( "Validator" );  ## By name
     $t->disable_handler( $h0 );          ## By reference
 
 

Stops sending events to the indicated handler.

enable_handler
     $t->enable_handler( 0 );            ## By location
     $t->enable_handler( "Validator" );  ## By name
     $t->enable_handler( $h0 );          ## By reference
 
 

Stops sending events to the indicated handler.

AUTHOR

     Barrie Slaymaker <barries@slaysys.com>
 
 
     Copyright 2002, Barrie Slaymaker, All Rights Reserved
 
 

You may use this module under the terms of the Artistic, GNU Public, or BSD licenses, as you choose.