---
name: "XML::Saxon::XSLT2"
section: "3pm"
platform: "linux"
package: "libxml-saxon-xslt2-perl"
version: "0.010-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/XML::Saxon::XSLT2"
---

# XML::Saxon::XSLT2(3pm)

process XSLT 2.0 using Saxon 9.x.

## 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 \<http://saxon.sourceforge.net/\> - 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, \<xsl:import\> 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 \<transform\>, 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 \<xsl:message\> 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 \<http://rt.cpan.org/\>.

## 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.

\<http://saxon.sourceforge.net/\>.

## AUTHOR

Toby Inkster \<tobyink@cpan.org\>.

## 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.
