XSLT (Extensible Stylesheet Language Transformations, also XSL(T) or XSL-T), is a domain-specific declarative programming language that transforms text into text. It was originally designed for transforming XML documents into other XML documents, or other formats such as HTML for web pages, plain text, or XSL Formatting Objects. These formats can be subsequently converted to formats such as PDF, PostScript, and PNG. Support for JSON and plain-text transformation was added in later updates to the XSLT 1.0 specification. XSLT 3.0 implementations support Java, .NET, C/C++, Python, PHP and NodeJS. An XSLT 3.0 JavaScript library can also be hosted within the web browser. Modern web browsers also include native support for XSLT 1.0. However usage has always been rather low and declining. It was used by 0.02% of websites in 2013 and 0.001% in 2025. Over the years XSLT repeatedly had severe security vulnerabilities. Therefore, Google planned to remove it from Chromium in 2013 and 2015. Now Chromium, Firefox and WebKit plan on removing native XSLT support to make the browser more secure by the end of 2026. Today a Polyfill can be used to support even newer versions of XSLT without native support. The XSLT document transformation specifies how to transform an XML document into new document (usually XML, but other formats, such as plain text are supported). Typically, input documents are XML files, but anything from which the processor can build an XQuery and XPath Data Model can be used, such as relational database tables or geographical information systems. While XSLT was originally designed as a special-purpose language for XML transformation, the language is Turing-complete, making it theoretically capable of arbitrary computations. XSLT is often ambiguously referred to as XSL. This is due to XSL-FO using XSLT, the initial XSLT-only mimetype text/xsl, the more common filename extension .xsl and xsl: as namespace identifier in official resources, where every tag in the entire XSLT document is prefixed with xsl:. SAP even refers to it as ".xsl language" on its website. For example, in the network manager in Firefox on the SaxonJS website [1] you can see .xsl-files containing XSLT-code with the application/octet-stream mimetype.
History XSLT is influenced by functional languages, and by text-based pattern matching languages like SNOBOL and AWK. Its most direct predecessor is DSSSL, which did for SGML what XSLT does for XML.
XSLT 1.0: XSLT was part of the World Wide Web Consortium (W3C)'s eXtensible Stylesheet Language (XSL) development effort of 1998–1999, a project that also produced XSL-FO and XPath. Some members of the standards committee that developed XSLT, including James Clark, the editor, had previously worked on DSSSL. XSLT 1.0 was published as a W3C recommendation in November 1999. Despite its age, XSLT 1.0 is still widely used (as of 2018), since later versions are not supported natively in web browsers or for environments like LAMP. XSLT 2.0: after an abortive attempt to create a version 1.1 in 2001, the XSL working group joined forces with the XQuery working group to create XPath 2.0, with a richer data model and type system based on XML Schema. Building on this is XSLT 2.0, developed under the editorship of Michael Kay, which reached recommendation status in January 2007. The most important innovations in XSLT 2.0 include: String manipulation using regular expressions Functions and operators for manipulating dates, times, and durations Multiple output documents Grouping (creating hierarchic structure from flat input sequences) A richer type system and stronger type checking XSLT 3.0: became a W3C Recommendation on 8 June 2017. The main new features are: Streaming transformations: in previous versions the entire input document had to be read into memory before it could be processed, and output could not be written until processing had finished. XSLT 3.0 allows XML streaming which is useful for processing documents too large to fit in memory or when transformations are chained in XML Pipelines. Packages, to improve the modularity of large stylesheets. Improved handling of dynamic errors with, for example, an xsl:try instruction. Support for maps and arrays, enabling XSLT to handle JSON as well as XML. Functions can now be arguments to other (higher-order) functions.
Design and processing model
The XSLT processor takes one or more XML source documents, plus one or more XSLT stylesheets, and processes them to produce one or multiple output documents. In contrast to widely implemented imperative programming languages like C, XSLT is declarative. The basic processing paradigm is pattern matching. Rather than listing an imperative sequence of actions to perform in a stateful environment, template rules only define how to handle a node matching a particular XPath-like pattern, if the processor should happen to encounter one, and the contents of the templates effectively comprise functional expressions that directly represent their evaluated form: the result tree, which is the basis of the processor's output. A typical processor behaves as follows. First, assuming a stylesheet has already been read and prepared, the processor builds a source tree from the input XML document. It then processes the source tree's root node, finds the best-matching template for that node in the stylesheet, and evaluates the template's contents. Instructions in each template generally direct the processor to either create nodes in the result tree, or to process more nodes in the source tree in the same way as the root node. Finally the result tree is serialized as XML or HTML text.
XPath
XSLT uses XPath to identify subsets of the source document tree and perform calculations. XPath also provides a range of functions, which XSLT itself further augments. XSLT 1.0 uses XPath 1.0, while XSLT 2.0 uses XPath 2.0. XSLT 3.0 will work with either XPath 3.0 or 3.1. In the case of 1.0 and 2.0, the XSLT and XPath specifications were published on the same date. With 3.0, however, they were no longer synchronized. XPath 3.0 became a Recommendation in April 2014, followed by XPath 3.1 in February 2017. XSLT 3.0 followed in June 2017.
XQuery compared
… excerpt ends here. Continue reading the full article.


