NAME "XML::Filter::Conditional" - an XML SAX filter for conditionally ignoring XML content SYNOPSIS CODE: package My::XML::Filter; use base qw( XML::Filter::Conditional ); sub store_switch { my $self = shift; my ( $e ) = @_; my $ename = $e->{Attributes}{'{}env'}{Value}; return $ENV{$ename}; } sub eval_case { my $self = shift; my ( $value, $e ) = @_; return $value eq $e->{Attributes}{'{}value'}{Value}; } XML: Hello there, root user Hello there, mail user Hello, whoever you are DESCRIPTION This module provides an abstract base class to implement a PerlSAX filter which conditionally ignores part of the XML content. The base class provides the implememtation of actually surpressing SAX events for filtering purposes, and delegates the evaluation of matches to the subclassed instance. The evaluation of the matches is performed by the abstract methods "store_switch()" and "eval_case()"; see their detail below. CONSTRUCTOR $filter = XML::Filter::Conditional->new( %opts ) Takes the following options: Handler => OBJECT The PerlSAX handler (or another filter) that will receive the PerlSAX events from this filter. SwitchTag => STRING or REGEXP CaseTag => STRING or REGEXP OtherwiseTag => STRING or REGEXP Changes the tag names used for the "switch", "case" and "otherwise" elements. Can be precompiled regexp values instead of literal strings. The values will be matched against the local name of the tag only, ignoring any namespace prefix. NamespaceURI => STRING If present, the tags will only be recognised if they are part of the given namespace. Defaults to the empty string, meaning tags will only be recognised if they do not have a namespace prefix, and no default namespace was defined for the document. MatchAll => BOOLEAN Determines whether all of the matching "" elements will be used, or only the first one that matches. By default, only the first matching one will be used. ABSTRACT METHODS The following methods must be implemented by any instance of this class which is constructed. $value = $self->store_switch( $e ) This method is called when a "switch" element is entered. It is passed the PerlSAX node in the $e parameter. The value it returns, in scalar context, is stored by the object, to pass into any "eval_case()" methods which may apply to this element. This method helps to keep the case evaluations efficient, by allowing the evaluation logic to precompute whatever values it might find useful once, to be reused by the cases themselves. See the SYNOPSIS section for an example. $bool = $self->eval_case( $value, $e ) This method is called when a "case" element is found, to determine whether it should be considered to match. It is passed whatever the earlier "store_switch()" method returned as the $value parameter, and the PerlSAX node as the $e parameter. It should return a value, whose truth will be used to determine if the case matches. See the SYNOPSIS section for an example. SEE ALSO * XML::SAX - Simple API for XML AUTHOR Paul Evans