SVG::Parser(3) User Contributed Perl Documentation SVG::Parser(3)NAMESVG::Parser - XML Parser for SVG documents
SYNOPSIS
#!/usr/bin/perl -w
use strict;
use SVG::Parser;
die "Usage: $0 <file>\n" unless @ARGV;
my $xml;
{
local $/=undef;
$xml=<>;
}
my $parser=new SVG::Parser(-debug => 1);
my $svg=$parser->parse($xml);
print $svg->xmlify;
and:
#!/usr/bin/perl -w
use strict;
use SVG::Parser qw(SAX=XML::LibXML::Parser::SAX Expat SAX);
die "Usage: $0 <file>\n" unless @ARGV;
my $svg=SVG::Parser->new()->parsefile($ARGV[0]);
print $svg->xmlify;
DESCRIPTIONSVG::Parser is an XML parser for SVG Documents. It takes XML as input
and produces an SVG object as its output.
SVG::Parser supports both XML::SAX and XML::Parser (Expat) parsers,
with SAX preferred by default. Only one of these needs to be installed
for SVG::Parser to function.
A list of preferred parsers may be specified in the import list -
SVG::Parser will use the first parser that successfully loads. Some
basic measures are taken to provide cross-compatability. Applications
requiring more advanced parser features should use the relevant parser
module directly; see SVG::Parser::Expat and SVG::Parser::SAX.
METHODS
SVG::Parser provides all methods supported by its parent parser class.
In addition it provides the following:
· new([%attrs])
Create a new SVG::Parser object. Optional attributes may be passed
as arguments; all attributes without a leading '-' prefix are
passed to the parent constructor. For example:
my $parser=new SVG::Parser(%parser_options);
Note that parser options are dependant on which parser type is
selected.
Attributes with a leading '-' are processed by SVG::Parser.
Currently the only recognised attribute is '-debug', which
generates a simple but possibly useful debug trace of the parsing
process to standard error. For example:
my $parser=new SVG::Parser(-debug => 1);
or:
my $parser=SVG::Parser->new(-debug => 1);
Attributes with a leading '--' are passed to the SVG constructor
when creating the SVG object returned as the result of the parse:
my $parser=new SVG::Parser(
-debug => 1,
"--indent" => "\t",
"--raiseerror" => 1
);
The leading '-' is stripped from attribute names passed this way,
so this sets the '-indent' and '-raiseerror' attributes in the SVG
module. See SVG for a list of valid SVG options.
(The "new" constructor is provided by XML::SAX::Expat or
SVG::Parser::SAX, but operates identically in either case.)
· parse($xml)
Parse an XML document and return an SVG object which may then be
used to manipulate the SVG content before regenerating the output
XML. For example:
my $svg=$parser->parse($svgxml);
Because the parse() method differs in use beteen XML::Parser and
XML::SAX, SVG::Parser provides its own parse() method. This calls
the parent parser with the correct first argument when given either
a filehandle or a string as input.
Additional arguments are passed to the parent parser class, but
since XML::Parser and XML::SAX parsers take options in different
formats this is of limited use. SVG::Parser does not currently
provide any translation of parser options.
See XML::Parser, XML::SAX, and XML::Parser::PerlSAX for other ways
to parse input XML.
· parse_file($filehandle|$filename)
· parsefile($filehandle|$filename)
Since the parse_file() method (XML::SAX) and parsefile() method
(XML::Parser) differ in both name and usage, SVG::Parser provides
its own version of both methods that determines whether the passed
argument is a filehandle or a file name and directs the call to the
appropriate parent parser method.
Both methods will work equally well whichever parent parser class
is in use:
my $svg=$parser->parse_file($svgxml);
my $svg=$parser->parsefile($svgxml);
my $svg=$parser->parse_file(*SVGIN);
my $svg=$parser->parsefile(*SVGIN);
...etc...
(These methods will also work when using SVG::Parser::Expat or
SVG::Parser::SAX directly.)
EXPORTS
None. However, a list of preferred parsers can be specified by passing
the package name to SVG::Parser in the import list. This allows an SVG
parser application to use the best parser available without knowing
what XML parsers might be available on the target platform. SAX is
generally preferred to Expat, but an Expat-based parser may be
preferable to the slow Perl-based SAX parser XML::SAX::PurePerl. (See
XML::SAX::PurePerl.)
Each parser specification consists of one of the two supported SVG
parsers, SVG::Parser::Expat or SVG::Parser::SAX, optionally followed by
an '=' and an explicit parser package. For example:
use SVG::Parser qw(SVG::Parser::SAX SVG::Parser::Expat);
Instead of specifying the full SVG parser name, 'Expat' and 'SAX' may
be used as shorthand. For example:
use SVG::Parser qw(SAX Expat);
Both the above examples produce the default behaviour. To prefer Expat
over SAX use either of:
use SVG::Parser qw(SVG::Parser::Expat SVG::Parser::SAX);
use SVG::Parser qw(Expat SAX);
To use Expat with a specific XML::Parser subclass:
use SVG::Parser qw(SVG::Parser::Expat=My::XML::Parser::Subclass);
To use SAX with the XML::LibXML SAX parser:
use SVG::Parser qw(SVG::Parser::SAX=XML::LibXML::SAX::Parser);
A number of specifications can be listed to have SVG::Parse try a
number of possible parser alternatives in decreasing order of
preference:
use SVG::Parser qw(
SAX=My::SAXParser
Expat=My::Best::ExpatParser
SAX=XML::LibXML::SAX::Parser
Expat=My::Other::ExpatParser
Expat
SAX
)
You can test different scenarios from the command line. For example:
perl -MSVG::Parser=SAX mysvgapp.pl
perl -MSVG::Parser=Expat,SAX mysvgapp.pl
perl -MSVG::Parser=SAX=XML::LibXML::SAX::Parser,Expat mysvgapp.pl
To pass additional items in the import list to the parent Expat or SAX
parser class, use additional '=' separators in the parser
specification. In the case of XML::SAX a minimum version number may be
required this way:
# require version 1.40+ of the LibXML SAX parser, otherwise use Perl
use SVG::Parser qw(
SAX=XML::LibXML::SAX::Parser=1.40
SAX=XML::SAX::PurePerl
);
Similarly, from the command line:
perl -MSVG::Parser=SAX=XML::LibXML::SAX::Parser=1.40,SAX=XML::SAX::PurePerl mysvgapp.pl
EXAMPLES
See "svgparse", "svgparse2", and "svgparse3" in the examples directory
of the distribution, along with "svgexpatparse" and "svgsaxparse" for
examples of using the SVG::Parser::Expat and SVG::Parser::SAX modules
directly.
AUTHOR
Peter Wainwright, peter.wainwright@cybrid.net
SEE ALSO
SVG, SVG::Parser::Expat, SVG::Parser::SAX, XML::Parser, XML::SAX
perl v5.18.1 2013-10-18 SVG::Parser(3)