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.