XML::Filter::SAXT - Replicates SAX events to several SAX event handlers

# NAME

XML::Filter::SAXT - Replicates SAX events to several SAX event handlers

# SYNOPSIS

     $saxt = new XML::Filter::SAXT ( { Handler => $out0 },
    				 { DocumentHandler => $out1 },
    				 { DTDHandler => $out3,
    				   Handler => $out4
    				 }
    			       );

     $perlsax = new XML::Parser::PerlSAX ( Handler => $saxt );
     $perlsax->parse ( [OPTIONS] );

# DESCRIPTION

SAXT is like the Unix 'tee' command in that it splits the input stream to several output streams. In this case, the input stream is a PerlSAX event producer (like XML::Parser::PerlSAX) and the output streams are PerlSAX handlers.

The SAXT constructor takes a list of hash references. Each hash specifies and output handler. The hash keys can be: DocumentHandler, DTDHandler, EntityResolver or Handler, where Handler is a combination of the previous three and acts as the default handler. E.g. if DocumentHandler is not specified, it will try to use Handler.

## EXAMPLE

In this example we use XML::Parser::PerlSAX to parse an XML file and to invoke the PerlSAX callbacks of our SAXT object. The SAXT object then forwards the callbacks to XML::Checker, which will 'die' if it encounters an error, and to XML::DOM::PerlSAX, which will store the XML in an XML::DOM::Document.

     use XML::Parser::PerlSAX;
     use XML::Filter::SAXT;
     use XML::DOM::PerlSAX;
     use XML::Checker;

     my $checker = new XML::Checker;
     my $builder = new XML::DOM::PerlSAX (KeepCDATA => 1);
     my $tee = new XML::Filter::SAXT ( { Handler => $checker },
    				   { Handler => $builder } );

     my $parser = new XML::Parser::PerlSAX (Handler => $tee);
     eval
     {
        local $XML::Checker::FAIL = \&my_fail;
        my $dom_document = $parser->parsefile ("file.xml");
        ... your code here ...
     };
     if ($@)
     {
        # Either XML::Parser::PerlSAX threw an exception (bad XML)
        # or XML::Checker found an error and my_fail died.
        ... your error handling code here ...
     }

     # XML::Checker error handler
     sub my_fail
     {
       my $code = shift;
       die XML::Checker::error_string ($code, @_)
    	if $code < 200;	  # warnings and info messages are >= 200
     }

# CAVEATS

This is still alpha software. Package names and interfaces are subject to change.

# AUTHOR

Send bug reports, hints, tips, suggestions to Enno Derksen at <enno@att.com>.

Last updated: Fri Oct 22 18:47:33 1999