|
Packit |
d27c7e |
=head1 Using PerlSAX
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
Working with PerlSAX involves using two classes (packages), a PerlSAX
|
|
Packit |
d27c7e |
parser that generates parsing events and a class that you write that
|
|
Packit |
d27c7e |
will receive those parsing events, the ``handler''. This guide will
|
|
Packit |
d27c7e |
use the XML::Parser::PerlSAX parser that uses Clark Cooper's
|
|
Packit |
d27c7e |
XML::Parser module.
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
The handler class implements the PerlSAX handler methods that you are
|
|
Packit |
d27c7e |
interested in. The following example, MyHandler.pm, prints a message
|
|
Packit |
d27c7e |
every time an element starts or ends:
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
package MyHandler;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub new {
|
|
Packit |
d27c7e |
my ($type) = @_;
|
|
Packit |
d27c7e |
return bless {}, $type;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub start_element {
|
|
Packit |
d27c7e |
my ($self, $element) = @_;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
print "Start element: $element->{Name}\n";
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub end_element {
|
|
Packit |
d27c7e |
my ($self, $element) = @_;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
print "End element: $element->{Name}\n";
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
1;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
To use your handler you will need to have a script, myhandler.pl, that
|
|
Packit |
d27c7e |
loads and creates your handler and the parser, and then calls the
|
|
Packit |
d27c7e |
parser to parse the XML instance and send events to your handler:
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
use XML::Parser::PerlSAX;
|
|
Packit |
d27c7e |
use MyHandler;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
my $my_handler = MyHandler->new;
|
|
Packit |
d27c7e |
my $parser = XML::Parser::PerlSAX->new( Handler => $my_handler );
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
foreach my $instance (@ARGV) {
|
|
Packit |
d27c7e |
$parser->parse(Source => { SystemId => $instance });
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
Given this XML instance, myhandler.xml:
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
<article>
|
|
Packit |
d27c7e |
<title>Using PerlSAX</title>
|
|
Packit |
d27c7e |
<paragraph>Working with PerlSAX ...</paragraph>
|
|
Packit |
d27c7e |
</article>
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
Running myhandler.pl like this:
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
perl myhandler.pl myhandler.xml
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
will produce this output:
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
Start element: article
|
|
Packit |
d27c7e |
Start element: title
|
|
Packit |
d27c7e |
End element: title
|
|
Packit |
d27c7e |
Start element: paragraph
|
|
Packit |
d27c7e |
End element: paragraph
|
|
Packit |
d27c7e |
End element: article
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
=head2 For More Information
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
PerlSAX.pod describes the PerlSAX interface. Each parser module
|
|
Packit |
d27c7e |
describes it's individual capabilities. XML::Parser::PerlSAX is the
|
|
Packit |
d27c7e |
most commonly used PerlSAX implementation.
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
The files described in this doc are in the `examples' directory. A
|
|
Packit |
d27c7e |
more complete implementation of the very simple handler above is in
|
|
Packit |
d27c7e |
the module XML::Handler::Sample. Other, more complex handlers are in
|
|
Packit |
d27c7e |
the XML::Handler directory as well.
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
Another hands-on doc for PerlSAX is the XML-Parser-and-PerlSAX.pod.
|
|
Packit |
d27c7e |
This doc describes the difference between and the purpose of PerlSAX
|
|
Packit |
d27c7e |
with respect to XML::Parser.
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
This document was inspired by and uses the code examples from David
|
|
Packit |
d27c7e |
Megginson's ``Quick Start for SAX Application Writers.''
|
|
Packit |
d27c7e |
<http://www.megginson.com/SAX/quickstart.html>
|