• RaptorXML from
Altova is an XSLT 3.0 processor available in the XMLSpy development toolkit and as a free-standing server implementation, invoked using a REST interface. •
IBM offers XSLT processing embedded in a special-purpose hardware appliance under the
Datapower brand. •
libxslt is a
free library released under the
MIT License that can be reused in commercial applications. It is based on
libxml and implemented in
C for speed and portability. It supports XSLT 1.0 and
EXSLT extensions. • It can be used at the command line via xsltproc which is included in
macOS and many
Linux distributions, and can be used on
Windows via
Cygwin. • The
WebKit and
Blink layout engines, used for example in the
Safari and
Chrome web browsers respectively, uses the libxslt library to do XSL transformations. •
Bindings exist for
Python,
Perl,
Ruby,
PHP,
Common Lisp,
Tcl, and
C++. •
Microsoft provides two XSLT processors (both XSLT 1.0 only). The earlier processor
MSXML provides COM interfaces; from MSXML 4.0 it also includes the command line utility msxsl.exe. The .NET runtime includes a separate built-in XSLT processor in its System.Xml.Xsl library. •
Saxon is an XSLT 3.0 and XQuery 3.1 processor with
open-source and
proprietary versions for stand-alone operation and for
Java,
JavaScript and .NET. A separate product Saxon-JS offers XSLT 3.0 processing on
Node.js and in the browser. • xjslt is an
open-source XSLT 2.0 compiler for
JavaScript supporting
Node.js and the browser. •
Xalan is an open source XSLT 1.0 processor from the
Apache Software Foundation available for Java and C++. A variant of the Xalan processor is included as the default XSLT processor in the standard Java distribution from Oracle. • Web browsers: Safari, Chrome, Firefox, Opera and Internet Explorer all support XSLT 1.0 (only). Browsers can perform on-the-fly transformations of XML files and display the transformation output in the browser window. This is done either by embedding the XSL in the XML document or by referencing a file containing XSL instructions from the XML document. The latter may not work with Chrome on files from local filesystem because of its security model. • Adobe AXSLE engine, a proprietary library
Performance Most early XSLT processors were interpreters. More recently, code generation is increasingly common, using portable intermediate languages (such as
Java bytecode or .NET
Common Intermediate Language) as the target. However, even the interpretive products generally offer separate analysis and execution phases, allowing an optimized expression tree to be created in memory and reused to perform multiple transformations. This gives substantial performance benefits in online publishing applications, where the same transformation is applied many times per second to different source documents. This separation is reflected in the design of XSLT processing APIs (such as
JAXP). Early XSLT processors had very few optimizations. Stylesheet documents were read into
Document Object Models and the processor would act on them directly.
XPath engines were also not optimized. Increasingly, however, XSLT processors use optimization techniques found in functional programming languages and database query languages, such as static rewriting of an expression tree (e.g., to move calculations out of loops), and lazy pipelined evaluation to reduce the
memory footprint of intermediate results (and allow "early exit" when the processor can evaluate an expression such as following-sibling::*[1] without a complete evaluation of all subexpressions). Many processors also use tree representations that are significantly more efficient (in both space and time) than general-purpose DOM implementations. In June 2014, Debbie Lockett and
Michael Kay introduced an open-source benchmarking framework for XSLT processors called XT-Speedo. ==See also==