NAME
XML::Saxon::XSLT2 - process XSLT 2.0 using Saxon 9.x.
SYNOPSIS
use XML::Saxon::XSLT2;
# make sure to open filehandle in right encoding
open(my $input, '<:encoding(UTF-8)', 'path/to/xml') or die $!;
open(my $xslt, '<:encoding(UTF-8)', 'path/to/xslt') or die $!;
my $trans = XML::Saxon::XSLT2->new($xslt, $baseurl);
my $output = $trans->transform($input);
print $output;
my $output2 = $trans->transform_document($input);
my @paragraphs = $output2->getElementsByTagName('p');
DESCRIPTION
This module implements XSLT 1.0 and 2.0 using Saxon 9.x via Inline::Java.
It expects Saxon to be installed in either '/usr/share/java/saxon9he.jar'
or '/usr/local/share/java/saxon9he.jar'. Future versions should be more
flexible. The saxon9he.jar file can be found at
- just dowload the latest Java release of
Saxon-HE 9.x, open the Zip archive, extract saxon9he.jar and save it to
one of the two directories above.
Import
use XML::Saxon::XSLT2;
You can include additional parameters which will be passed straight on to
Inline::Java, like this:
use XML::Saxon::XSLT2 EXTRA_JAVA_ARGS => '-Xmx256m';
The `import` function *must* be called. If you load this module without
importing it, it will not work. (Don't worry, it won't pollute your
namespace.)
Constructor
`XML::Saxon::XSLT2->new($xslt, [$baseurl])`
Creates a new transformation. $xslt may be a string, a file handle or
an XML::LibXML::Document. $baseurl is an optional base URL for
resolving relative URL references in, for instance,
links. Otherwise, the current directory is assumed to be the base.
(For base URIs which are filesystem directories, remember to include
the trailing slash.)
Methods
`$trans->parameters($key=>$value, $key2=>$value2, ...)`
Sets transformation parameters prior to running the transformation.
Each key is a parameter name.
Each value is the parameter value. This may be a scalar, in which case
it's treated as an xs:string; a DateTime object, which is treated as
an xs:dateTime; a URI object, xs:anyURI; a Math::BigInt, xs:long; or
an arrayref where the first element is the type and the second the
value. For example:
$trans->parameters(
now => DateTime->now,
madrid_is_capital_of_spain => [ boolean => 1 ],
price_of_fish => [ decimal => '1.99' ],
my_link => URI->new('http://example.com/'),
your_link => [ uri => 'http://example.net/' ],
);
The following types are supported via the arrayref notation: float,
double, long (alias int, integer), decimal, bool (alias boolean),
string, qname, uri, date, datetime. These are case-insensitive.
`$trans->transform($doc, [$output_method])`
Run a transformation, returning the output as a string.
$doc may be a string, a file handle or an XML::LibXML::Document.
$output_method may be 'xml', 'xhtml', 'html' or 'text' to override the
XSLT output method; or 'default' to use the output method specified in
the XSLT file. 'default' is the default. In the current release,
'default' is broken. :-(
`$trans->transform_document($doc, [$output_method])`
As per , but returns the output as an
XML::LibXML::Document.
This method is slower than `transform`.
`$trans->messages`
Returns a list of string representations of messages output by
during the last transformation run.
`$trans->media_type($default)`
Returns the output media type for the transformation.
If the transformation doesn't specify an output type, returns the
default.
`$trans->doctype_public($default)`
Returns the output DOCTYPE public identifier for the transformation.
If the transformation doesn't specify a doctype, returns the default.
`$trans->doctype_system($default)`
Returns the output DOCTYPE system identifier for the transformation.
If the transformation doesn't specify a doctype, returns the default.
`$trans->version($default)`
Returns the output XML version for the transformation.
If the transformation doesn't specify a version, returns the default.
`$trans->encoding($default)`
Returns the output encoding for the transformation.
If the transformation doesn't specify an encoding, returns the
default.
BUGS
Please report any bugs to .
SEE ALSO
XML::LibXSLT is probably more reliable in terms of easy installation on a
variety of platforms, and it allows you to define your own XSLT extension
functions. However, the libxslt library that it's based on only supports
XSLT 1.0.
This module uses Inline::Java.
.
AUTHOR
Toby Inkster .
COPYRIGHT
Copyright 2010-2012, 2014 Toby Inkster
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.