Programming languages

Mastering XSLT for Data Transformation

Jump to article

Understanding XSLT: Evolution, Features, and Applications

Introduction to XSLT

Extensible Stylesheet Language Transformations (XSLT) is a programming language designed for transforming XML documents into different formats. Originating in the late 1990s, XSLT became a cornerstone of web development and data processing, offering powerful ways to manipulate XML data. XML, or Extensible Markup Language, is widely used to store and transport data across various platforms, but to display or use this data meaningfully, it often needs to be converted into a more user-friendly format. This is where XSLT comes into play.

XSLT serves as a transformation tool, capable of converting XML data into HTML, text, or even other XML documents, by applying a set of rules or templates defined in XSLT stylesheets. These transformations are essential in environments where data is stored in XML format, such as web services, data interchange between applications, and configuration management systems.

The Origins and Evolution of XSLT

The development of XSLT was part of the broader XML revolution that gained momentum in the 1990s. The World Wide Web Consortium (W3C), which is responsible for developing standards for web technologies, introduced XSLT as part of the Extensible Stylesheet Language (XSL) specification. The primary goal of XSL was to provide a comprehensive suite of technologies for transforming, presenting, and manipulating XML documents.

The initial version of XSLT was released in 1998, and it was intended to be used with XML documents, allowing developers to define transformations using templates written in the XSLT syntax. This version was an evolution of earlier methods for manipulating XML, such as XPath and XSL, and aimed to provide a standardized way to carry out transformations. The first versions of XSLT were fairly limited in their scope and capabilities, but over the years, successive revisions improved its efficiency, expressiveness, and compatibility with various web technologies.

XSLT 1.0 was widely adopted for transforming XML into a variety of output formats, including HTML for web pages, plain text, or other structured XML formats. It provided basic features for template-based transformations but had limitations in terms of handling complex scenarios and data structures. The release of XSLT 2.0 in 2007 brought significant enhancements, including better support for regular expressions, more powerful data handling functions, and the ability to handle sequences and multi-step transformations.

XSLT Syntax and Core Concepts

XSLT documents themselves are XML documents that contain various elements used to define how an XML document should be transformed. A typical XSLT stylesheet consists of the following core components:

  1. Templates: The fundamental unit of transformation in XSLT. A template matches a specific XML element or pattern and applies rules to transform it. Templates can match specific tags, attributes, or entire XML documents.

  2. XPath: XSLT relies heavily on XPath, a language used to navigate and select elements or attributes within an XML document. XPath expressions allow the developer to identify the data to be transformed and apply specific templates to those elements.

  3. Output Methods: XSLT supports various output formats, such as XML, HTML, and plain text. These formats dictate how the transformed data will be presented.

  4. Control Structures: XSLT includes control structures like conditionals (xsl:if and xsl:choose) and loops (xsl:for-each) to enable more complex transformations. These features allow developers to apply logic during transformations based on the content of the XML document.

  5. Extensions and Functions: Over time, XSLT has introduced custom functions and extensions that allow developers to extend the language’s core functionality. These can be used to handle tasks such as date manipulation, string processing, and more.

Key Features of XSLT

XSLT, while originally designed for transforming XML documents, offers several features that make it an invaluable tool in a wide range of applications.

1. Template-based Processing

XSLT operates based on a template-based system, where rules or templates define how each part of an XML document should be transformed. The primary structure of an XSLT stylesheet revolves around templates that match certain XML elements or patterns. For example, an XSLT template might match every </code> element in a document and format it as an HTML heading. This ability to define reusable templates makes XSLT highly modular and adaptable for various types of XML transformations.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="16" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h4>2. <strong>XPath Integration</strong></h4> <p>XPath is one of the core components of XSLT, allowing developers to easily navigate and query XML data. XPath expressions are used to select nodes in an XML document, allowing developers to apply transformations only to specific elements, attributes, or sections of the data. XPath is essential for targeting elements within an XML document and extracting the necessary information for transformation.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="17" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h4>3. <strong>Separation of Content and Presentation</strong></h4> <p>One of the key advantages of using XSLT is its ability to separate content from presentation. With XSLT, the XML document serves purely as a source of data, while the XSLT stylesheet defines how that data should be presented. This separation allows the same XML data to be transformed into multiple different formats, including HTML, PDF, or even plain text, without modifying the original content. This principle is particularly beneficial in scenarios where the same data needs to be presented in different environments or to different audiences.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="18" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h4>4. <strong>Extensibility</strong></h4> <p>XSLT is highly extensible, allowing developers to define their own functions and variables within a stylesheet. This extensibility is particularly useful in complex transformations that may require additional processing or custom behavior beyond what is provided by the built-in XSLT functions. Through the use of extension functions, developers can extend the capabilities of XSLT to handle more specific tasks, such as interacting with external data sources or applying complex algorithms.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="19" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h4>5. <strong>Cross-platform Compatibility</strong></h4> <p>XSLT is a platform-independent technology that is widely supported across various operating systems, development environments, and web servers. XSLT is built into many modern programming languages and frameworks, including Java, Python, PHP, and .NET. This cross-platform compatibility ensures that XSLT transformations can be easily integrated into a wide variety of applications and services, regardless of the underlying technology stack.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="20" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h4>6. <strong>Error Handling and Debugging</strong></h4> <p>XSLT provides basic error handling capabilities, enabling developers to detect and respond to issues that may arise during the transformation process. While XSLT is not as robust in error reporting as some other languages, tools like <code>xsl:message</code> allow developers to display error messages or warnings, helping to debug transformations during development. Additionally, modern XSLT processors often provide more advanced debugging features, making it easier to identify and fix issues within the transformation.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="21" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h3 id="applications-of-xslt">Applications of XSLT</h3> <p>XSLT has found applications across a broad range of fields, from web development to data processing and beyond. Some of the most notable uses of XSLT include:</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="22" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h4>1. <strong>Web Development</strong></h4> <p>In web development, XSLT is often used to transform XML data into HTML for display on web pages. For example, an XML document containing product information can be transformed into an HTML table for presentation on an e-commerce site. This separation of data and presentation makes it easier to update the structure and appearance of web pages without modifying the underlying data.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="23" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h4>2. <strong>Data Interchange</strong></h4> <p>XSLT is widely used in data interchange between systems that communicate using XML. For example, a company might receive data in XML format from a third-party supplier and need to transform it into a different format for internal use. XSLT can automate this transformation process, ensuring that the data is correctly formatted and ready for integration into the company’s internal systems.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="24" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h4>3. <strong>Document Generation</strong></h4> <p>Another common use of XSLT is in the generation of reports, invoices, and other documents. XSLT can be used to generate PDFs, HTML reports, or text documents from structured XML data. This is particularly useful in scenarios where a system needs to generate documents dynamically based on changing data, such as financial statements, product catalogs, or custom reports.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="25" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h4>4. <strong>Configuration Files and Metadata Processing</strong></h4> <p>XSLT is often used to process configuration files or metadata in XML format. For example, a system may need to transform an XML-based configuration file into a format that is readable by a particular software application or framework. XSLT can facilitate this process, ensuring that the configuration data is processed correctly and efficiently.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="26" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h4>5. <strong>Content Management Systems (CMS)</strong></h4> <p>In CMS applications, XSLT is commonly used to transform XML-based content into different output formats, such as HTML, RSS, or even mobile-friendly formats. This is particularly useful in managing and publishing content across different channels, as the same XML content can be transformed and presented in various formats without duplicating the data.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="27" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <h3 id="conclusion">Conclusion</h3> <p>XSLT is a powerful tool for transforming and presenting XML data in various formats. Its ability to separate content from presentation, its integration with XPath for querying XML data, and its extensibility make it an invaluable technology for a wide range of applications. Whether used in web development, data interchange, document generation, or configuration management, XSLT remains a cornerstone technology for anyone working with XML. Its ongoing development and support across various platforms ensure that it will continue to play a key role in the evolution of data processing and web technologies for years to come.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="28" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> <p>In conclusion, XSLT is not merely a tool for transforming XML; it is a versatile and essential component of modern web development and data processing. Understanding its features, syntax, and potential applications can provide developers and organizations with the tools they need to work with XML data more efficiently and effectively.</p><div class="fsl-ad-slot fsl-ad-slot--paragraph" data-fsl-article-ad="29" data-nosnippet><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2303082872" data-ad-format="auto" data-full-width-responsive="true"></ins></div> </div> </div> </div> </div> <div class="article-ad"></div> <footer class="article-footer"> <section class="article-correction"> <div><span class="eyebrow">HELP US STAY ACCURATE</span><h2>Spot something that needs attention?</h2><p>Send the exact page and issue to our editorial review queue.</p></div> <a href="https://freesourcelibrary.com/report-an-issue/?article_url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/">Report this article</a> </section> </footer> <section class="related-posts"> <div class="section-heading"><h2>Read next</h2></div> <div class="related-grid"> <article class="post-card post-card--standard"> <a class="post-card__image" href="https://freesourcelibrary.com/introduction-to-xql-query-language-2/" tabindex="-1" aria-hidden="true"> <img width="620" height="349" src="https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured.webp" class="post-image wp-post-image" alt="Abstract scientific illustration of an open book and orbital lines" loading="eager" decoding="async" srcset="https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured.webp 1672w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-300x169.webp 300w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-1024x576.webp 1024w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-768x432.webp 768w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-1536x864.webp 1536w" sizes="auto, (max-width: 620px) 100vw, 620px" fetchpriority="high" /> </a> <div class="post-card__body"> <a class="post-kicker" href="https://freesourcelibrary.com/category/technology-computing/programming-languages/">Programming languages</a> <h3 class="post-card__title"><a href="https://freesourcelibrary.com/introduction-to-xql-query-language-2/">Introduction to XQL Query Language</a></h3> <div class="post-meta"><time datetime="2025-01-12T11:17:53+03:00">January 12, 2025</time><span>4 min read</span></div> </div> <button class="fsl-save-button fsl-save-button--card" type="button" data-fsl-save data-id="232166" data-title="Introduction to XQL Query Language" data-url="https://freesourcelibrary.com/introduction-to-xql-query-language-2/" data-image="https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured.webp" data-category="Programming languages" data-minutes="4" aria-pressed="false" aria-label="Save Introduction to XQL Query Language for later"> <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 4.5h12V21l-6-3.7L6 21V4.5Z"></path></svg><span>Save</span> </button> </article> <article class="post-card post-card--standard"> <a class="post-card__image" href="https://freesourcelibrary.com/pldb-software-library-overview/" tabindex="-1" aria-hidden="true"> <img width="620" height="349" src="https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured.webp" class="post-image wp-post-image" alt="Abstract scientific illustration of an open book and orbital lines" loading="lazy" decoding="async" srcset="https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured.webp 1672w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-300x169.webp 300w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-1024x576.webp 1024w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-768x432.webp 768w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-1536x864.webp 1536w" sizes="auto, (max-width: 620px) 100vw, 620px" /> </a> <div class="post-card__body"> <a class="post-kicker" href="https://freesourcelibrary.com/category/technology-computing/programming-languages/">Programming languages</a> <h3 class="post-card__title"><a href="https://freesourcelibrary.com/pldb-software-library-overview/">PLDB Software Library Overview</a></h3> <div class="post-meta"><time datetime="2025-01-12T11:12:40+03:00">January 12, 2025</time><span>4 min read</span></div> </div> <button class="fsl-save-button fsl-save-button--card" type="button" data-fsl-save data-id="232162" data-title="PLDB Software Library Overview" data-url="https://freesourcelibrary.com/pldb-software-library-overview/" data-image="https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured.webp" data-category="Programming languages" data-minutes="4" aria-pressed="false" aria-label="Save PLDB Software Library Overview for later"> <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 4.5h12V21l-6-3.7L6 21V4.5Z"></path></svg><span>Save</span> </button> </article> <article class="post-card post-card--standard"> <a class="post-card__image" href="https://freesourcelibrary.com/wolontis-bell-interpreter-overview/" tabindex="-1" aria-hidden="true"> <img width="620" height="349" src="https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured.webp" class="post-image wp-post-image" alt="Abstract scientific illustration of an open book and orbital lines" loading="lazy" decoding="async" srcset="https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured.webp 1672w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-300x169.webp 300w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-1024x576.webp 1024w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-768x432.webp 768w, https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured-1536x864.webp 1536w" sizes="auto, (max-width: 620px) 100vw, 620px" /> </a> <div class="post-card__body"> <a class="post-kicker" href="https://freesourcelibrary.com/category/technology-computing/programming-languages/">Programming languages</a> <h3 class="post-card__title"><a href="https://freesourcelibrary.com/wolontis-bell-interpreter-overview/">Wolontis-Bell Interpreter Overview</a></h3> <div class="post-meta"><time datetime="2025-01-12T11:05:25+03:00">January 12, 2025</time><span>2 min read</span></div> </div> <button class="fsl-save-button fsl-save-button--card" type="button" data-fsl-save data-id="232156" data-title="Wolontis-Bell Interpreter Overview" data-url="https://freesourcelibrary.com/wolontis-bell-interpreter-overview/" data-image="https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured.webp" data-category="Programming languages" data-minutes="2" aria-pressed="false" aria-label="Save Wolontis-Bell Interpreter Overview for later"> <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 4.5h12V21l-6-3.7L6 21V4.5Z"></path></svg><span>Save</span> </button> </article> </div> </section> </article> <aside class="editorial-sidebar" aria-label="More from Free Source Library"> <section class="sidebar-module"> <div class="section-heading section-heading--dark"><h2>Editor’s picks</h2></div> <ol class="ranked-list"> <li> <span>01</span> <div><a href="https://freesourcelibrary.com/cop17-biodiversity-summit-2026-global-review/">COP17 Biodiversity Summit 2026: What the Global Review Means</a><time datetime="2026-10-21T16:29:47+03:00">Oct 21, 2026</time></div> </li> <li> <span>02</span> <div><a href="https://freesourcelibrary.com/connected-car-cybersecurity-apps-cloud-risks/">Connected-Car Cybersecurity: Apps and Cloud Are the New Weak Point</a><time datetime="2026-10-21T16:29:43+03:00">Oct 21, 2026</time></div> </li> <li> <span>03</span> <div><a href="https://freesourcelibrary.com/ai-in-warfare-human-control-shrinking/">AI in Warfare: Why Human Control Is Shrinking</a><time datetime="2026-10-21T16:29:39+03:00">Oct 21, 2026</time></div> </li> <li> <span>04</span> <div><a href="https://freesourcelibrary.com/unep-emissions-gap-report-2026-1-5c-overshoot/">UNEP Emissions Gap Report 2026: What the 1.5°C Overshoot Means</a><time datetime="2026-10-21T16:29:35+03:00">Oct 21, 2026</time></div> </li> <li> <span>05</span> <div><a href="https://freesourcelibrary.com/orionid-meteor-shower-2026-viewing-guide/">Orionid Meteor Shower 2026: Peak Time and Viewing Guide</a><time datetime="2026-10-21T16:29:28+03:00">Oct 21, 2026</time></div> </li> </ol> </section> <section class="sidebar-module standards-card"> <span class="eyebrow">OUR PROMISE</span> <h2>Knowledge you can inspect</h2> <p>Learn how we source, review and correct our explanations.</p> <a href="https://freesourcelibrary.com/editorial-policy/">Read our editorial standards <span aria-hidden="true">→</span></a> </section> </aside> </div> </main> <footer class="site-footer" data-site-footer> <div class="footer-atmosphere" aria-hidden="true"><i></i><i></i><i></i></div> <section class="footer-hero site-container" aria-labelledby="footer-heading"> <div class="footer-hero__copy"> <span class="footer-kicker"><i aria-hidden="true"></i> The library never closes</span> <h2 id="footer-heading">Follow the question.<br><em>Find the context.</em></h2> <p>Readable explanations across science, technology, health, history and everyday life—built to help you understand, not just scroll.</p> <ul class="footer-promises" aria-label="Our publishing commitments"> <li><span aria-hidden="true">✓</span> Source-aware</li> <li><span aria-hidden="true">✓</span> Reader-first</li> <li><span aria-hidden="true">✓</span> Corrections welcomed</li> </ul> </div> <div class="footer-search-card"> <header><span>Find your next explanation</span><b aria-hidden="true">01</b></header> <form role="search" action="https://freesourcelibrary.com/" method="get"> <label class="screen-reader-text" for="footer-search">Search the library</label> <svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="6.5"></circle><path d="m16 16 4 4"></path></svg> <input id="footer-search" type="search" name="s" placeholder="Search a question, subject, or idea" autocomplete="off"> <button type="submit" aria-label="Search"><span>Search</span><b aria-hidden="true">→</b></button> </form> <div class="footer-search-card__topics"><span>Start with</span><a href="https://freesourcelibrary.com/category/science-nature/">Science & Nature</a><a href="https://freesourcelibrary.com/category/technology-computing/">Technology & Computing</a><a href="https://freesourcelibrary.com/category/health-medicine/">Health & Medicine</a></div> </div> </section> <div class="footer-signal" aria-hidden="true"><span></span><b>Evidence</b><span></span><b>Context</b><span></span><b>Clarity</b><span></span></div> <div class="footer-directory site-container"> <section class="footer-brand-panel"> <a class="site-brand" href="https://freesourcelibrary.com/" rel="home"><svg class="brand-mark brand-mark--animated" viewBox="0 0 64 64" width="64" height="64" aria-hidden="true" focusable="false"> <path class="brand-orbit" d="M6.5 37.5c2.8 9 19.1 12.4 36.3 7.4 17.2-5 28.8-16.4 26-25.4-2-6.4-11-9.8-22.2-9.2" pathLength="100"/> <circle class="brand-spark" cx="49.2" cy="11.8" r="4.2"/> <path class="brand-page brand-page--left" d="M12 25.2c7.2-.2 13.7 1.8 19.4 6.2v20.1c-5.7-4.1-12.2-6.2-19.4-6.2V25.2Z"/> <path class="brand-page brand-page--right" d="M51 25.2c-7.2-.2-13.7 1.8-19.4 6.2v20.1c5.7-4.1 12.2-6.2 19.4-6.2V25.2Z"/> <path class="brand-spine" d="M31.5 31.4v20.1"/> <path class="brand-line" d="M17 31.2c3.5.3 6.7 1.2 9.7 2.8M46 31.2c-3.5.3-6.7 1.2-9.7 2.8"/> </svg><span><strong>Free Source Library</strong><small>KNOWLEDGE, EXPLAINED</small></span></a> <p>Complex subjects, explained with calm, useful context for curious people everywhere.</p> <a class="footer-trust-link" href="https://freesourcelibrary.com/trust-center/"><span>See how we work</span><b aria-hidden="true">↗</b></a> <div class="footer-live" aria-label="Live site status and time"> <span><i aria-hidden="true"></i> Library online</span> <span>Local <strong data-footer-local>—:—</strong></span> <span>UTC <strong data-footer-utc>—:—</strong></span> </div> </section> <nav class="footer-navigation" aria-label="Footer navigation"> <details class="footer-link-group" open> <summary><span><small>01</small> Explore</span><i aria-hidden="true"></i></summary> <ul> <li><a href="https://freesourcelibrary.com/category/science-nature/"><span>Science & Nature</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/category/technology-computing/"><span>Technology & Computing</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/category/health-medicine/"><span>Health & Medicine</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/category/history-society/"><span>History & Society</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/tools/">Useful tools</a></li> </ul> </details> <details class="footer-link-group" open> <summary><span><small>02</small> More topics</span><i aria-hidden="true"></i></summary> <ul> <li><a href="https://freesourcelibrary.com/category/education-skills/"><span>Education & Skills</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/category/business-economics/"><span>Business & Economics</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/category/places-travel/"><span>Places & Travel</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/category/lifestyle-home/"><span>Lifestyle & Home</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/categories/"><span>All topics</span><b aria-hidden="true">↗</b></a></li> </ul> </details> <details class="footer-link-group" open> <summary><span><small>03</small> Our standards</span><i aria-hidden="true"></i></summary> <ul> <li><a href="https://freesourcelibrary.com/trust-center/"><span>Trust center</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/editorial-policy/"><span>Editorial policy</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/sources-verification/"><span>Sources & verification</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/corrections-policy/"><span>Corrections</span><b aria-hidden="true">↗</b></a></li> </ul> </details> <details class="footer-link-group" open> <summary><span><small>04</small> Reader desk</span><i aria-hidden="true"></i></summary> <ul> <li><a href="https://freesourcelibrary.com/last-article/"><span>Latest articles</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/about-us/"><span>About us</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/contact-us/"><span>Contact us</span><b aria-hidden="true">↗</b></a></li> <li><a href="https://freesourcelibrary.com/report-an-issue/"><span>Report an issue</span><b aria-hidden="true">↗</b></a></li> </ul> </details> </nav> </div> <div class="footer-bottom"> <div class="site-container footer-bottom__inner"> <p><strong>© 2026 Free Source Library.</strong><span>Knowledge, explained.</span></p> <nav aria-label="Legal navigation"> <a href="https://freesourcelibrary.com/privacy-policy/">Privacy</a> <a href="https://freesourcelibrary.com/cookie-policy/">Cookies</a> <a href="https://freesourcelibrary.com/terms-of-use/">Terms</a> <a href="https://freesourcelibrary.com/publisher-information/">Publisher</a> <a href="#privacy-choices" data-fsl-privacy-open>Privacy choices</a> <a href="https://freesourcelibrary.com/contact-us/">Contact</a> </nav> <a class="footer-backtotop" href="#" aria-label="Back to the top of the page">Back to top <span aria-hidden="true">↑</span></a> </div> </div> </footer> <button class="fsl-privacy-launcher" type="button" data-fsl-privacy-open aria-label="Privacy and cookie choices" aria-controls="fsl-privacy-choices" aria-expanded="false" hidden> <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M12 2.5 4.5 5.8v5.1c0 5 3.1 9.1 7.5 10.6 4.4-1.5 7.5-5.6 7.5-10.6V5.8L12 2.5Z"/><path d="M9 12.1 11.1 14l4-4.3"/></svg> <span class="fsl-privacy-sr">Open privacy and cookie choices</span> </button> <section class="fsl-privacy-panel" id="fsl-privacy-choices" role="dialog" aria-modal="false" aria-labelledby="fsl-privacy-title" aria-describedby="fsl-privacy-summary" hidden> <button class="fsl-privacy-panel__close" type="button" data-fsl-privacy-close aria-label="Close privacy choices" hidden>×</button> <div class="fsl-privacy-panel__heading"> <span class="fsl-privacy-panel__eyebrow">Your privacy controls</span> <h2 id="fsl-privacy-title">Privacy, cookies & site services</h2> <p id="fsl-privacy-summary">Essential storage runs the site and remembers this choice. Optional analytics helps us understand how the library is used. Article advertising remains enabled, but advertising-storage and personalization signals stay disabled.</p> </div> <ul class="fsl-privacy-panel__services" aria-label="Cookie and service status"> <li><span>Essential storage</span><strong>Always on</strong></li> <li><span>Analytics & tracking</span><strong>Optional</strong></li> <li><span>Article advertising</span><strong>Articles only</strong></li> <li><span>Personalized advertising</span><strong>Off</strong></li> </ul> <p class="fsl-privacy-panel__detail">Allowing analytics lets our self-hosted Matomo and Google Analytics measure visits and interactions. Rejecting keeps optional measurement cookies off. Google may still receive limited technical requests required to serve non-personalized or limited ads inside individual articles.</p> <div class="fsl-privacy-panel__actions"> <button class="fsl-privacy-panel__button fsl-privacy-panel__button--secondary" type="button" data-fsl-consent-choice="essential">Reject optional tracking</button> <button class="fsl-privacy-panel__button fsl-privacy-panel__button--primary" type="button" data-fsl-consent-choice="analytics">Allow analytics & tracking</button> </div> <nav class="fsl-privacy-panel__links" aria-label="Privacy information"> <a href="https://freesourcelibrary.com/cookie-policy/">Cookie policy</a> <a href="https://freesourcelibrary.com/privacy-policy/">Privacy policy</a> <span>Change this choice anytime from the footer.</span> </nav> </section> <p class="fsl-privacy-sr" id="fsl-privacy-status" role="status" aria-live="polite"></p> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/fsl-newsroom/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="fsl-reader-hub-js-extra"> var FSLReaderHub = {"version":"1.1.2","article":{"id":212052,"title":"Mastering XSLT for Data Transformation","url":"https://freesourcelibrary.com/mastering-xslt-for-data-transformation/","image":"https://freesourcelibrary.com/wp-content/uploads/free-source-library-default-featured.webp","category":"Programming languages","minutes":7},"homeUrl":"https://freesourcelibrary.com/"}; //# sourceURL=fsl-reader-hub-js-extra </script> <script data-cfasync="false" data-wp-strategy="defer" defer id="fsl-reader-hub-js" src="https://freesourcelibrary.com/wp-content/plugins/fsl-reader-hub/assets/reader-hub.js?ver=1792173495"></script> <script data-cfasync="false" data-wp-strategy="defer" defer id="fsl-newsroom-js" src="https://freesourcelibrary.com/wp-content/themes/fsl-newsroom/assets/js/site.js?ver=1792173934"></script> <script id="googlesitekit-consent-mode-js" src="https://freesourcelibrary.com/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-consent-mode-5ef17bce870a966299fc.js"></script> <script id="wp-consent-api-js-extra"> var consent_api = {"consent_type":"optin","waitfor_consent_hook":"","cookie_expiration":"180","cookie_prefix":"wp_consent","services":[]}; //# sourceURL=wp-consent-api-js-extra </script> <script id="wp-consent-api-js" src="https://freesourcelibrary.com/wp-content/plugins/wp-consent-api/assets/js/wp-consent-api.min.js?ver=2.1.0"></script> <script data-cfasync="false" id="fsl-privacy-consent-js-before"> window.FSLPrivacyConsent={"cookieName":"fsl_privacy_consent","policyVersion":"2026-10-22","cookieDays":180,"matomoUrl":"https:\/\/all2.atico-jo.com\/","matomoSiteId":"11","googleMeasurementId":"G-SVDRR4KDYE"}; //# sourceURL=fsl-privacy-consent-js-before </script> <script data-cfasync="false" id="fsl-privacy-consent-js" src="https://freesourcelibrary.com/wp-content/plugins/fsl-privacy-consent/assets/privacy-consent-1.1.1.js?ver=1.1.1"></script> <script id="fsl-article-ad-initializer" data-cfasync="false"> (function(){ 'use strict'; function update(unit){ var wrapper=unit.closest('.fsl-ad-slot'),status=unit.getAttribute('data-ad-status'); if(!wrapper){return;} if(status==='filled'||status==='unfilled'){wrapper.setAttribute('data-fsl-ad-state',status);} } function initialize(unit){ if(unit.getAttribute('data-fsl-ad-requested')==='1'){return;} unit.setAttribute('data-fsl-ad-requested','1'); new MutationObserver(function(){update(unit);}).observe(unit,{attributes:true,attributeFilter:['data-ad-status']}); update(unit); try{(window.adsbygoogle=window.adsbygoogle||[]).push({});}catch(error){unit.closest('.fsl-ad-slot').setAttribute('data-fsl-ad-state','unfilled');} } document.querySelectorAll('[data-fsl-article-ad] .adsbygoogle').forEach(initialize); }()); </script> </body> </html>