-
-
14 Jun 2019 02:18:34 UTC
- Distribution: XML-SAX
- Module version: 1.02
- Source (raw)
- Browse (raw)
- Changes
- How to Contribute
- Repository
- Issues (42)
- Testers (7051 / 3 / 0)
- Kwalitee
Bus factor: 0- 50.38% Coverage
- License: unknown
- Activity
24 month- Tools
- Download (46.21KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
- Dependencies
- File::Temp
- XML::NamespaceSupport
- XML::SAX::Base
- and possibly others
- Reverse dependencies
- CPAN Testers List
- Dependency graph
Take me over?
The maintainer of this distribution is looking for someone to take over! If you're interested then please contact them via email.NAME
XML::SAX - Simple API for XML
SYNOPSIS
use XML::SAX; # get a list of known parsers my $parsers = XML::SAX->parsers(); # add/update a parser XML::SAX->add_parser(q(XML::SAX::PurePerl)); # remove parser XML::SAX->remove_parser(q(XML::SAX::Foodelberry)); # save parsers XML::SAX->save_parsers();DESCRIPTION
XML::SAX is a SAX parser access API for Perl. It includes classes and APIs required for implementing SAX drivers, along with a factory class for returning any SAX parser installed on the user's system.
USING A SAX2 PARSER
The factory class is XML::SAX::ParserFactory. Please see the documentation of that module for how to instantiate a SAX parser: XML::SAX::ParserFactory. However if you don't want to load up another manual page, here's a short synopsis:
use XML::SAX::ParserFactory; use XML::SAX::XYZHandler; my $handler = XML::SAX::XYZHandler->new(); my $p = XML::SAX::ParserFactory->parser(Handler => $handler); $p->parse_uri("foo.xml"); # or $p->parse_string("<foo/>") or $p->parse_file($fh);This will automatically load a SAX2 parser (defaulting to XML::SAX::PurePerl if no others are found) and return it to you.
In order to learn how to use SAX to parse XML, you will need to read XML::SAX::Intro and for reference, XML::SAX::Specification.
WRITING A SAX2 PARSER
The first thing to remember in writing a SAX2 parser is to subclass XML::SAX::Base. This will make your life infinitely easier, by providing a number of methods automagically for you. See XML::SAX::Base for more details.
When writing a SAX2 parser that is compatible with XML::SAX, you need to inform XML::SAX of the presence of that driver when you install it. In order to do that, XML::SAX contains methods for saving the fact that the parser exists on your system to a "INI" file, which is then loaded to determine which parsers are installed.
The best way to do this is to follow these rules:
Add XML::SAX as a prerequisite in Makefile.PL:
WriteMakefile( ... PREREQ_PM => { 'XML::SAX' => 0 }, ... );Alternatively you may wish to check for it in other ways that will cause more than just a warning.
Add the following code snippet to your Makefile.PL:
sub MY::install { package MY; my $script = shift->SUPER::install(@_); if (ExtUtils::MakeMaker::prompt( "Do you want to modify ParserDetails.ini?", 'Y') =~ /^y/i) { $script =~ s/install :: (.*)$/install :: $1 install_sax_driver/m; $script .= <<"INSTALL"; install_sax_driver : \t\@\$(PERL) -MXML::SAX -e "XML::SAX->add_parser(q(\$(NAME)))->save_parsers()" INSTALL } return $script; }Note that you should check the output of this - \$(NAME) will use the name of your distribution, which may not be exactly what you want. For example XML::LibXML has a driver called XML::LibXML::SAX::Generator, which is used in place of \$(NAME) in the above.
Add an XML::SAX test:
A test file should be added to your t/ directory containing something like the following:
use Test; BEGIN { plan tests => 3 } use XML::SAX; use XML::SAX::PurePerl::DebugHandler; XML::SAX->add_parser(q(XML::SAX::MyDriver)); local $XML::SAX::ParserPackage = 'XML::SAX::MyDriver'; eval { my $handler = XML::SAX::PurePerl::DebugHandler->new(); ok($handler); my $parser = XML::SAX::ParserFactory->parser(Handler => $handler); ok($parser); ok($parser->isa('XML::SAX::MyDriver'); $parser->parse_string("<tag/>"); ok($handler->{seen}{start_element}); };
EXPORTS
By default, XML::SAX exports nothing into the caller's namespace. However you can request the symbols
NamespacesandValidationwhich are the URIs for those features, allowing an easier way to request those features via ParserFactory:use XML::SAX qw(Namespaces Validation); my $factory = XML::SAX::ParserFactory->new(); $factory->require_feature(Namespaces); $factory->require_feature(Validation); my $parser = $factory->parser();AUTHOR
Current maintainer: Grant McLean, grantm@cpan.org
Originally written by:
Matt Sergeant, matt@sergeant.org
Kip Hampton, khampton@totalcinema.com
Robin Berjon, robin@knowscape.com
LICENSE
This is free software, you may use it and distribute it under the same terms as Perl itself.
SEE ALSO
XML::SAX::Base for writing SAX Filters and Parsers
XML::SAX::PurePerl for an XML parser written in 100% pure perl.
XML::SAX::Exception for details on exception handling
Module Install Instructions
To install XML::SAX, copy and paste the appropriate command in to your terminal.
cpanm XML::SAXperl -MCPAN -e shell install XML::SAXFor more information on module installation, please visit the detailed CPAN module installation guide.