| libxml-perl documentation | Contained in the libxml-perl distribution. |
XML::PatAct::ACTION - An action module for
use XML::PatAct::ACTION; my $patterns = [ PATTERN => ACTION, ... ]; my $matcher = XML::PatAct::ACTION->new(Patterns => $patterns, Matcher => $matcher );
XML::PatAct::ACTION is a PerlSAX handler for applying pattern-action lists to XML parses or trees. XML::PatAct::ACTION ...
New XML::PatAct::ACTION instances are creating by calling `new()'. A Parameters can be passed as a list of key, value pairs or a hash. Patterns and Matcher options are required. Patterns is the pattern-action list to apply. Matcher is an instance of the pattern or query matching module.
DESCRIBE THE FORMAT OF YOUR ACTIONS HERE
This template file was written by Ken MacLeod, ken@bitsko.slc.ut.us
perl(1)
``Using PatAct Modules'' and ``Creating PatAct Modules'' in libxml-perl.
| libxml-perl documentation | Contained in the libxml-perl distribution. |
# This template file is in the Public Domain. # You may do anything you want with this file. # # $Id: ActionTempl.pm,v 1.2 1999/08/16 16:04:03 kmacleod Exp $ # # replace all occurrences of ACTION with the name of your module! use strict; use UNIVERSAL; package XML::PatAct::ACTION; sub new { my $type = shift; my $self = ($#_ == 0) ? { %{ (shift) } } : { @_ }; bless $self, $type; my $usage = <<'EOF'; usage: XML::PatAct::ACTION->new( Matcher => $matcher, Patterns => $patterns ); EOF die "No Matcher specified\n$usage\n" if !defined $self->{Matcher}; die "No Patterns specified\n$usage\n" if !defined $self->{Patterns}; # perform additional initialization here return $self; } sub start_document { my ($self, $document) = @_; # initialize the pattern module at the start of a document $self->{Matcher}->initialize($self); # create empty name and node lists for passing to `match()' $self->{Names} = [ ]; $self->{Nodes} = [ ]; # Knowing that a source is a tree can be useful information $self->{SourceIsGrove} = UNIVERSAL::isa($document, 'Data::Grove'); } sub end_document { my ($self, $document) = @_; # notify the pattern module that we're done $self->{Matcher}->finalize(); my $value; # perform any finalization actions, use $value to return a result # from calling `parse()' # release all the info that is just used during event handling $self->{Matcher} = $self->{Names} = $self->{Nodes} = undef; $self->{SourceIsGrove} = undef; return $value; } sub start_element { my ($self, $element) = @_; push @{$self->{Names}}, $element->{Name}; push @{$self->{Nodes}}, $element; my $index = $self->{Matcher}->match($element, $self->{Names}, $self->{Nodes}); # use $index to retrieve an action for this element } sub end_element { my ($self, $end_element) = @_; my $name = pop @{$self->{Names}}; my $element = pop @{$self->{Nodes}}; # perform any finishing steps at the end of an element } sub characters { my ($self, $characters) = @_; } sub processing_instruction { my ($self, $pi) = @_; } sub ignorable_whitespace { my ($self, $characters) = @_; } 1; __END__