Programming languages

Mastering XSLT for Data Transformation

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> <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> <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> <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> <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> <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> <h3>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> <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> <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> <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> <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> <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> <h3>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> <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> </div> </div> </p> <div class="stream-item stream-item-below-post-content"><div class="stream-item-size" style=""> <div class="stream-item stream-item-in-post stream-item-in-post-1"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3293364314201893" crossorigin="anonymous"></script> <!-- free --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2108173765" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div></div> </div><!-- .entry-content /--> <div id="post-extra-info"> <div class="theiaStickySidebar"> <div class="single-post-meta post-meta clearfix"></div><!-- .post-meta --> <div id="share-buttons-top" class="share-buttons share-buttons-top"> <div class="share-links share-centered icons-only share-rounded"> <a href="https://www.facebook.com/sharer.php?u=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Facebook" target="_blank" class="facebook-share-btn " data-raw="https://www.facebook.com/sharer.php?u={post_link}"> <span class="share-btn-icon tie-icon-facebook"></span> <span class="screen-reader-text">Facebook</span> </a> <a href="https://twitter.com/intent/tweet?text=Mastering%20XSLT%20for%20Data%20Transformation&url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="X" target="_blank" class="twitter-share-btn " data-raw="https://twitter.com/intent/tweet?text={post_title}&url={post_link}"> <span class="share-btn-icon tie-icon-twitter"></span> <span class="screen-reader-text">X</span> </a> <a href="https://www.linkedin.com/shareArticle?mini=true&url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&title=Mastering%20XSLT%20for%20Data%20Transformation" rel="external noopener nofollow" title="LinkedIn" target="_blank" class="linkedin-share-btn " data-raw="https://www.linkedin.com/shareArticle?mini=true&url={post_full_link}&title={post_title}"> <span class="share-btn-icon tie-icon-linkedin"></span> <span class="screen-reader-text">LinkedIn</span> </a> <a href="https://www.tumblr.com/share/link?url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&name=Mastering%20XSLT%20for%20Data%20Transformation" rel="external noopener nofollow" title="Tumblr" target="_blank" class="tumblr-share-btn " data-raw="https://www.tumblr.com/share/link?url={post_link}&name={post_title}"> <span class="share-btn-icon tie-icon-tumblr"></span> <span class="screen-reader-text">Tumblr</span> </a> <a href="https://pinterest.com/pin/create/button/?url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&description=Mastering%20XSLT%20for%20Data%20Transformation&media=https://freesourcelibrary.com/wp-content/uploads/2023/11/free-source-library-high-resolution-color-logo-1024x768-1.png" rel="external noopener nofollow" title="Pinterest" target="_blank" class="pinterest-share-btn " data-raw="https://pinterest.com/pin/create/button/?url={post_link}&description={post_title}&media={post_img}"> <span class="share-btn-icon tie-icon-pinterest"></span> <span class="screen-reader-text">Pinterest</span> </a> <a href="https://reddit.com/submit?url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&title=Mastering%20XSLT%20for%20Data%20Transformation" rel="external noopener nofollow" title="Reddit" target="_blank" class="reddit-share-btn " data-raw="https://reddit.com/submit?url={post_link}&title={post_title}"> <span class="share-btn-icon tie-icon-reddit"></span> <span class="screen-reader-text">Reddit</span> </a> <a href="fb-messenger://share?app_id=5303202981&display=popup&link=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&redirect_uri=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Messenger" target="_blank" class="messenger-mob-share-btn messenger-share-btn " data-raw="fb-messenger://share?app_id=5303202981&display=popup&link={post_link}&redirect_uri={post_link}"> <span class="share-btn-icon tie-icon-messenger"></span> <span class="screen-reader-text">Messenger</span> </a> <a href="https://www.facebook.com/dialog/send?app_id=5303202981&display=popup&link=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&redirect_uri=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Messenger" target="_blank" class="messenger-desktop-share-btn messenger-share-btn " data-raw="https://www.facebook.com/dialog/send?app_id=5303202981&display=popup&link={post_link}&redirect_uri={post_link}"> <span class="share-btn-icon tie-icon-messenger"></span> <span class="screen-reader-text">Messenger</span> </a> <a href="https://api.whatsapp.com/send?text=Mastering%20XSLT%20for%20Data%20Transformation%20https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="WhatsApp" target="_blank" class="whatsapp-share-btn " data-raw="https://api.whatsapp.com/send?text={post_title}%20{post_link}"> <span class="share-btn-icon tie-icon-whatsapp"></span> <span class="screen-reader-text">WhatsApp</span> </a> <a href="viber://forward?text=Mastering%20XSLT%20for%20Data%20Transformation%20https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Viber" target="_blank" class="viber-share-btn " data-raw="viber://forward?text={post_title}%20{post_link}"> <span class="share-btn-icon tie-icon-phone"></span> <span class="screen-reader-text">Viber</span> </a> <a href="https://line.me/R/msg/text/?Mastering%20XSLT%20for%20Data%20Transformation%20https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Line" target="_blank" class="line-share-btn " data-raw="https://line.me/R/msg/text/?{post_title}%20{post_link}"> <span class="share-btn-icon tie-icon-line"></span> <span class="screen-reader-text">Line</span> </a> <a href="mailto:?subject=Mastering%20XSLT%20for%20Data%20Transformation&body=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Share via Email" target="_blank" class="email-share-btn " data-raw="mailto:?subject={post_title}&body={post_link}"> <span class="share-btn-icon tie-icon-envelope"></span> <span class="screen-reader-text">Share via Email</span> </a> <a href="#" rel="external noopener nofollow" title="Print" target="_blank" class="print-share-btn " data-raw="#"> <span class="share-btn-icon tie-icon-print"></span> <span class="screen-reader-text">Print</span> </a> </div><!-- .share-links /--> </div><!-- .share-buttons /--> </div> </div> <div class="clearfix"></div> <script id="tie-schema-json" type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"Article","dateCreated":"2024-12-12T10:18:30+03:00","datePublished":"2024-12-12T10:18:30+03:00","dateModified":"2024-12-12T10:18:30+03:00","headline":"Mastering XSLT for Data Transformation","name":"Mastering XSLT for Data Transformation","keywords":[],"url":"https:\/\/freesourcelibrary.com\/mastering-xslt-for-data-transformation\/","description":"Understanding XSLT: Evolution, Features, and ApplicationsIntroduction to XSLTExtensible Stylesheet Language Transformations (XSLT) is a programming language designed for transforming XML documents int","copyrightYear":"2024","articleSection":"Programming languages","articleBody":"Understanding XSLT: Evolution, Features, and ApplicationsIntroduction to XSLTExtensible 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 XSLTThe 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 ConceptsXSLT 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: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.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.Output Methods: XSLT supports various output formats, such as XML, HTML, and plain text. These formats dictate how the transformed data will be presented.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.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 XSLTXSLT, 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 ProcessingXSLT 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 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.2. XPath IntegrationXPath 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.3. Separation of Content and PresentationOne 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.4. ExtensibilityXSLT 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.5. Cross-platform CompatibilityXSLT 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.6. Error Handling and DebuggingXSLT 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 xsl:message 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.Applications of XSLTXSLT 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:1. Web DevelopmentIn 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.2. Data InterchangeXSLT 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\u2019s internal systems.3. Document GenerationAnother 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.4. Configuration Files and Metadata ProcessingXSLT 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.5. Content Management Systems (CMS)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.ConclusionXSLT 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.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.","publisher":{"@id":"#Publisher","@type":"Organization","name":"Free Source Library","logo":{"@type":"ImageObject","url":"https:\/\/freesourcelibrary.com\/wp-content\/uploads\/2023\/10\/free-source-library-high-resolution-logo-white-on-transparent-background.png"},"sameAs":["https:\/\/web.facebook.com\/freesourcelibrary\/"]},"sourceOrganization":{"@id":"#Publisher"},"copyrightHolder":{"@id":"#Publisher"},"mainEntityOfPage":{"@type":"WebPage","@id":"https:\/\/freesourcelibrary.com\/mastering-xslt-for-data-transformation\/","breadcrumb":{"@id":"#Breadcrumb"}},"author":{"@type":"Person","name":"Ayoob","url":"https:\/\/freesourcelibrary.com\/author\/admin\/"},"image":{"@type":"ImageObject","url":"https:\/\/freesourcelibrary.com\/wp-content\/uploads\/2023\/11\/free-source-library-high-resolution-color-logo-1024x768-1.png","width":1200,"height":768}}</script> <div id="share-buttons-bottom" class="share-buttons share-buttons-bottom"> <div class="share-links share-centered icons-only share-rounded"> <a href="https://www.facebook.com/sharer.php?u=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Facebook" target="_blank" class="facebook-share-btn " data-raw="https://www.facebook.com/sharer.php?u={post_link}"> <span class="share-btn-icon tie-icon-facebook"></span> <span class="screen-reader-text">Facebook</span> </a> <a href="https://twitter.com/intent/tweet?text=Mastering%20XSLT%20for%20Data%20Transformation&url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="X" target="_blank" class="twitter-share-btn " data-raw="https://twitter.com/intent/tweet?text={post_title}&url={post_link}"> <span class="share-btn-icon tie-icon-twitter"></span> <span class="screen-reader-text">X</span> </a> <a href="https://www.linkedin.com/shareArticle?mini=true&url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&title=Mastering%20XSLT%20for%20Data%20Transformation" rel="external noopener nofollow" title="LinkedIn" target="_blank" class="linkedin-share-btn " data-raw="https://www.linkedin.com/shareArticle?mini=true&url={post_full_link}&title={post_title}"> <span class="share-btn-icon tie-icon-linkedin"></span> <span class="screen-reader-text">LinkedIn</span> </a> <a href="https://www.tumblr.com/share/link?url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&name=Mastering%20XSLT%20for%20Data%20Transformation" rel="external noopener nofollow" title="Tumblr" target="_blank" class="tumblr-share-btn " data-raw="https://www.tumblr.com/share/link?url={post_link}&name={post_title}"> <span class="share-btn-icon tie-icon-tumblr"></span> <span class="screen-reader-text">Tumblr</span> </a> <a href="https://pinterest.com/pin/create/button/?url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&description=Mastering%20XSLT%20for%20Data%20Transformation&media=https://freesourcelibrary.com/wp-content/uploads/2023/11/free-source-library-high-resolution-color-logo-1024x768-1.png" rel="external noopener nofollow" title="Pinterest" target="_blank" class="pinterest-share-btn " data-raw="https://pinterest.com/pin/create/button/?url={post_link}&description={post_title}&media={post_img}"> <span class="share-btn-icon tie-icon-pinterest"></span> <span class="screen-reader-text">Pinterest</span> </a> <a href="https://reddit.com/submit?url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&title=Mastering%20XSLT%20for%20Data%20Transformation" rel="external noopener nofollow" title="Reddit" target="_blank" class="reddit-share-btn " data-raw="https://reddit.com/submit?url={post_link}&title={post_title}"> <span class="share-btn-icon tie-icon-reddit"></span> <span class="screen-reader-text">Reddit</span> </a> <a href="mailto:?subject=Mastering%20XSLT%20for%20Data%20Transformation&body=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Share via Email" target="_blank" class="email-share-btn " data-raw="mailto:?subject={post_title}&body={post_link}"> <span class="share-btn-icon tie-icon-envelope"></span> <span class="screen-reader-text">Share via Email</span> </a> <a href="#" rel="external noopener nofollow" title="Print" target="_blank" class="print-share-btn " data-raw="#"> <span class="share-btn-icon tie-icon-print"></span> <span class="screen-reader-text">Print</span> </a> </div><!-- .share-links /--> </div><!-- .share-buttons /--> </article><!-- #the-post /--> <div class="stream-item stream-item-below-post"><div class="stream-item-size" style=""> <div class="stream-item stream-item-in-post stream-item-in-post-1"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3293364314201893" crossorigin="anonymous"></script> <!-- free --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2108173765" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div></div> <div class="post-components"> <div class="stream-item stream-item-below-post-comments"><div class="stream-item-size" style=""> <div class="stream-item stream-item-in-post stream-item-in-post-1"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3293364314201893" crossorigin="anonymous"></script> <!-- free --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2108173765" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div></div> </div><!-- .post-components /--> </div><!-- .main-content --> </div><!-- .main-content-row /--></div><!-- #content /--><div class="stream-item stream-item-above-footer"><div class="stream-item-size" style=""> <div class="stream-item stream-item-in-post stream-item-in-post-1"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3293364314201893" crossorigin="anonymous"></script> <!-- free --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-3293364314201893" data-ad-slot="2108173765" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div></div> <footer id="footer" class="site-footer dark-skin dark-widgetized-area"> <div id="site-info" class="site-info"> <div class="container"> <div class="tie-row"> <div class="tie-col-md-12"> <div class="copyright-text copyright-text-first"><footer> © Copyright 2024, All Rights Reserved  |  <span style="color:red;" class="tie-icon-heart"></span>  |  <a href="https://freesourcelibrary.com/about-us/">About Us</a>  |  <a href="https://freesourcelibrary.com/terms-and-conditions/">Terms and Conditions</a> </footer> </div><div class="copyright-text copyright-text-second"><footer> <strong>๐ŸŒ Explore Our Websites:</strong>  |  <a href="https://mwade3.com/" target="_blank">๐Ÿ“– ู…ูˆุงุถูŠุน (AR)</a>  |  <a href="https://revistacompleta.com/" target="_blank">๐Ÿ“š La Revista Completa (ES)</a>  |  <a href="https://lasujets.com/" target="_blank">๐Ÿ“ฐ Lasujets (FR)</a>  |  <a href="https://meukultura.com/" target="_blank">๐ŸŽจ MEU Kultura (PT)</a>  |  <a href="https://freesourcelibrary.com/" target="_blank">๐Ÿ“‚ Free Source Library (EN)</a>  |  <a href="https://lovewithrecipes.com/" target="_blank">๐Ÿด Love with Recipes (EN)</a>  |  <a href="https://it-solutions.center/" target="_blank">๐Ÿ’ป IT Solutions Center (AR)</a> </footer></div><ul class="social-icons"><li class="social-icons-item"><a class="social-link facebook-social-icon" rel="external noopener nofollow" target="_blank" href="https://web.facebook.com/freesourcelibrary/"><span class="tie-social-icon tie-icon-facebook"></span><span class="screen-reader-text">Facebook</span></a></li></ul> </div><!-- .tie-col /--> </div><!-- .tie-row /--> </div><!-- .container /--> </div><!-- #site-info /--> </footer><!-- #footer /--> <div id="share-buttons-mobile" class="share-buttons share-buttons-mobile"> <div class="share-links icons-only"> <a href="https://www.facebook.com/sharer.php?u=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Facebook" target="_blank" class="facebook-share-btn " data-raw="https://www.facebook.com/sharer.php?u={post_link}"> <span class="share-btn-icon tie-icon-facebook"></span> <span class="screen-reader-text">Facebook</span> </a> <a href="https://twitter.com/intent/tweet?text=Mastering%20XSLT%20for%20Data%20Transformation&url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="X" target="_blank" class="twitter-share-btn " data-raw="https://twitter.com/intent/tweet?text={post_title}&url={post_link}"> <span class="share-btn-icon tie-icon-twitter"></span> <span class="screen-reader-text">X</span> </a> <a href="https://www.linkedin.com/shareArticle?mini=true&url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&title=Mastering%20XSLT%20for%20Data%20Transformation" rel="external noopener nofollow" title="LinkedIn" target="_blank" class="linkedin-share-btn " data-raw="https://www.linkedin.com/shareArticle?mini=true&url={post_full_link}&title={post_title}"> <span class="share-btn-icon tie-icon-linkedin"></span> <span class="screen-reader-text">LinkedIn</span> </a> <a href="https://www.tumblr.com/share/link?url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&name=Mastering%20XSLT%20for%20Data%20Transformation" rel="external noopener nofollow" title="Tumblr" target="_blank" class="tumblr-share-btn " data-raw="https://www.tumblr.com/share/link?url={post_link}&name={post_title}"> <span class="share-btn-icon tie-icon-tumblr"></span> <span class="screen-reader-text">Tumblr</span> </a> <a href="https://pinterest.com/pin/create/button/?url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&description=Mastering%20XSLT%20for%20Data%20Transformation&media=https://freesourcelibrary.com/wp-content/uploads/2023/11/free-source-library-high-resolution-color-logo-1024x768-1.png" rel="external noopener nofollow" title="Pinterest" target="_blank" class="pinterest-share-btn " data-raw="https://pinterest.com/pin/create/button/?url={post_link}&description={post_title}&media={post_img}"> <span class="share-btn-icon tie-icon-pinterest"></span> <span class="screen-reader-text">Pinterest</span> </a> <a href="https://reddit.com/submit?url=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&title=Mastering%20XSLT%20for%20Data%20Transformation" rel="external noopener nofollow" title="Reddit" target="_blank" class="reddit-share-btn " data-raw="https://reddit.com/submit?url={post_link}&title={post_title}"> <span class="share-btn-icon tie-icon-reddit"></span> <span class="screen-reader-text">Reddit</span> </a> <a href="fb-messenger://share?app_id=5303202981&display=popup&link=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&redirect_uri=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Messenger" target="_blank" class="messenger-mob-share-btn messenger-share-btn " data-raw="fb-messenger://share?app_id=5303202981&display=popup&link={post_link}&redirect_uri={post_link}"> <span class="share-btn-icon tie-icon-messenger"></span> <span class="screen-reader-text">Messenger</span> </a> <a href="https://www.facebook.com/dialog/send?app_id=5303202981&display=popup&link=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/&redirect_uri=https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Messenger" target="_blank" class="messenger-desktop-share-btn messenger-share-btn " data-raw="https://www.facebook.com/dialog/send?app_id=5303202981&display=popup&link={post_link}&redirect_uri={post_link}"> <span class="share-btn-icon tie-icon-messenger"></span> <span class="screen-reader-text">Messenger</span> </a> <a href="https://api.whatsapp.com/send?text=Mastering%20XSLT%20for%20Data%20Transformation%20https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="WhatsApp" target="_blank" class="whatsapp-share-btn " data-raw="https://api.whatsapp.com/send?text={post_title}%20{post_link}"> <span class="share-btn-icon tie-icon-whatsapp"></span> <span class="screen-reader-text">WhatsApp</span> </a> <a href="viber://forward?text=Mastering%20XSLT%20for%20Data%20Transformation%20https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Viber" target="_blank" class="viber-share-btn " data-raw="viber://forward?text={post_title}%20{post_link}"> <span class="share-btn-icon tie-icon-phone"></span> <span class="screen-reader-text">Viber</span> </a> <a href="https://line.me/R/msg/text/?Mastering%20XSLT%20for%20Data%20Transformation%20https://freesourcelibrary.com/mastering-xslt-for-data-transformation/" rel="external noopener nofollow" title="Line" target="_blank" class="line-share-btn " data-raw="https://line.me/R/msg/text/?{post_title}%20{post_link}"> <span class="share-btn-icon tie-icon-line"></span> <span class="screen-reader-text">Line</span> </a> </div><!-- .share-links /--> </div><!-- .share-buttons /--> <div class="mobile-share-buttons-spacer"></div> <a id="go-to-top" class="go-to-top-button" href="#go-to-tie-body"> <span class="tie-icon-angle-up"></span> <span class="screen-reader-text">Back to top button</span> </a> </div><!-- #tie-wrapper /--> <aside class=" side-aside normal-side dark-skin dark-widgetized-area appear-from-left" aria-label="Secondary Sidebar" style="visibility: hidden;"> <div data-height="100%" class="side-aside-wrapper has-custom-scroll"> <a href="#" class="close-side-aside remove big-btn"> <span class="screen-reader-text">Close</span> </a><!-- .close-side-aside /--> <div id="mobile-container"> <div id="mobile-search"> <form role="search" method="get" class="search-form" action="https://freesourcelibrary.com/"> <label> <span class="screen-reader-text">Search for:</span> <input type="search" class="search-field" placeholder="Search …" value="" name="s" /> </label> <input type="submit" class="search-submit" value="Search" /> </form> </div><!-- #mobile-search /--> <div id="mobile-menu" class=""> </div><!-- #mobile-menu /--> <div id="mobile-social-icons" class="social-icons-widget solid-social-icons"> <ul><li class="social-icons-item"><a class="social-link facebook-social-icon" rel="external noopener nofollow" target="_blank" href="https://web.facebook.com/freesourcelibrary/"><span class="tie-social-icon tie-icon-facebook"></span><span class="screen-reader-text">Facebook</span></a></li></ul> </div><!-- #mobile-social-icons /--> </div><!-- #mobile-container /--> </div><!-- .side-aside-wrapper /--> </aside><!-- .side-aside /--> </div><!-- #tie-container /--> </div><!-- .background-overlay /--> <style> .copy-tooltip { position: absolute; background-color: blue; color: #fff; padding: 12px 18px; border-radius: 8px; font-size: 14px; font-family: Arial, sans-serif; box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); display: none; z-index: 9999; transition: opacity 0.3s ease, transform 0.3s ease; transform: translateY(-10px); } .copy-tooltip.show { opacity: 1; transform: translateY(0); } </style> <div class="copy-tooltip" id="copyTooltip"></div> <script type="text/javascript"> document.addEventListener('DOMContentLoaded', function () { var tooltip = document.getElementById('copyTooltip'); function showTooltip(e, message) { tooltip.innerHTML = message; tooltip.style.left = e.pageX + 20 + 'px'; tooltip.style.top = e.pageY + 20 + 'px'; tooltip.classList.add('show'); tooltip.style.display = 'block'; setTimeout(function() { tooltip.classList.remove('show'); setTimeout(function() { tooltip.style.display = 'none'; }, 300); }, 3000); // Tooltip will disappear after 3 seconds } document.addEventListener('copy', function (e) { e.preventDefault(); var pageUrl = window.location.href; e.clipboardData.setData('text/plain', pageUrl); showTooltip(e, 'Copying content is not allowed. Use sharing buttons instead.'); }); document.addEventListener('keydown', function (e) { if (e.ctrlKey && (e.key === 'c' || e.key === 'C')) { e.preventDefault(); var pageUrl = window.location.href; navigator.clipboard.writeText(pageUrl); showTooltip(e, 'Copying content is not allowed. Use sharing buttons instead.'); } }); document.addEventListener('contextmenu', function (e) { e.preventDefault(); showTooltip(e, 'Right-click is disabled.'); }); }); </script> <script id="ckyBannerTemplate" type="text/template"><div class="cky-overlay cky-hide"></div><div class="cky-btn-revisit-wrapper cky-revisit-hide" data-cky-tag="revisit-consent" data-tooltip="Consent Preferences" style="background-color:#0056a7"> <button class="cky-btn-revisit" aria-label="Consent Preferences"> <img src="https://freesourcelibrary.com/wp-content/plugins/cookie-law-info/lite/frontend/images/revisit.svg" alt="Revisit consent button"> </button></div><div class="cky-consent-container cky-hide" tabindex="0"> <div class="cky-consent-bar" data-cky-tag="notice" style="background-color:#121212;border-color:#2a2a2a"> <div class="cky-notice"> <p class="cky-title" role="heading" aria-level="1" data-cky-tag="title" style="color:#d0d0d0">Free Source Library value your privacy</p><div class="cky-notice-group"> <div class="cky-notice-des" data-cky-tag="description" style="color:#d0d0d0"> <p>We use cookies to enhance your browsing experience, serve personalized ads or content, and analyze our traffic. By clicking "Accept All", you consent to our use of cookies.</p> </div><div class="cky-notice-btn-wrapper" data-cky-tag="notice-buttons"> <button class="cky-btn cky-btn-customize" aria-label="Customize" data-cky-tag="settings-button" style="color:#d0d0d0;background-color:transparent;border-color:#d0d0d0">Customize</button> <button class="cky-btn cky-btn-reject" aria-label="Reject All" data-cky-tag="reject-button" style="color:#d0d0d0;background-color:transparent;border-color:#d0d0d0">Reject All</button> <button class="cky-btn cky-btn-accept" aria-label="Accept All" data-cky-tag="accept-button" style="color:#d0d0d0;background-color:#1863dc;border-color:#1863dc">Accept All</button> </div></div></div></div></div><div class="cky-modal" tabindex="0"> <div class="cky-preference-center" data-cky-tag="detail" style="color:#d0d0d0;background-color:#121212;border-color:#2A2A2A"> <div class="cky-preference-header"> <span class="cky-preference-title" role="heading" aria-level="1" data-cky-tag="detail-title" style="color:#d0d0d0">Customize Consent Preferences</span> <button class="cky-btn-close" aria-label="[cky_preference_close_label]" data-cky-tag="detail-close"> <img src="https://freesourcelibrary.com/wp-content/plugins/cookie-law-info/lite/frontend/images/close.svg" alt="Close"> </button> </div><div class="cky-preference-body-wrapper"> <div class="cky-preference-content-wrapper" data-cky-tag="detail-description" style="color:#d0d0d0"> <p>Free Source Library use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.</p> <p>The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site.</p> <p>We also use third-party cookies that help us analyze how you use this website, store your preferences, and provide the content and advertisements that are relevant to you. These cookies will only be stored in your browser with your prior consent.</p> <p>You can choose to enable or disable some or all of these cookies but disabling some of them may affect your browsing experience.</p> </div><div class="cky-accordion-wrapper" data-cky-tag="detail-categories"> <div class="cky-accordion" id="ckyDetailCategorynecessary"> <div class="cky-accordion-item"> <div class="cky-accordion-chevron"><i class="cky-chevron-right"></i></div> <div class="cky-accordion-header-wrapper"> <div class="cky-accordion-header"><button class="cky-accordion-btn" aria-label="Necessary" data-cky-tag="detail-category-title" style="color:#d0d0d0">Necessary</button><span class="cky-always-active">Always Active</span> <div class="cky-switch" data-cky-tag="detail-category-toggle"><input type="checkbox" id="ckySwitchnecessary"></div> </div> <div class="cky-accordion-header-des" data-cky-tag="detail-category-description" style="color:#d0d0d0"> <p>Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.</p></div> </div> </div> <div class="cky-accordion-body"> <div class="cky-audit-table" data-cky-tag="audit-table" style="color:#d0d0d0;background-color:#2a2a2a;border-color:#474444"><p class="cky-empty-cookies-text">No cookies to display.</p></div> </div> </div><div class="cky-accordion" id="ckyDetailCategoryfunctional"> <div class="cky-accordion-item"> <div class="cky-accordion-chevron"><i class="cky-chevron-right"></i></div> <div class="cky-accordion-header-wrapper"> <div class="cky-accordion-header"><button class="cky-accordion-btn" aria-label="Functional" data-cky-tag="detail-category-title" style="color:#d0d0d0">Functional</button><span class="cky-always-active">Always Active</span> <div class="cky-switch" data-cky-tag="detail-category-toggle"><input type="checkbox" id="ckySwitchfunctional"></div> </div> <div class="cky-accordion-header-des" data-cky-tag="detail-category-description" style="color:#d0d0d0"> <p>Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.</p></div> </div> </div> <div class="cky-accordion-body"> <div class="cky-audit-table" data-cky-tag="audit-table" style="color:#d0d0d0;background-color:#2a2a2a;border-color:#474444"><p class="cky-empty-cookies-text">No cookies to display.</p></div> </div> </div><div class="cky-accordion" id="ckyDetailCategoryanalytics"> <div class="cky-accordion-item"> <div class="cky-accordion-chevron"><i class="cky-chevron-right"></i></div> <div class="cky-accordion-header-wrapper"> <div class="cky-accordion-header"><button class="cky-accordion-btn" aria-label="Analytics" data-cky-tag="detail-category-title" style="color:#d0d0d0">Analytics</button><span class="cky-always-active">Always Active</span> <div class="cky-switch" data-cky-tag="detail-category-toggle"><input type="checkbox" id="ckySwitchanalytics"></div> </div> <div class="cky-accordion-header-des" data-cky-tag="detail-category-description" style="color:#d0d0d0"> <p>Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.</p></div> </div> </div> <div class="cky-accordion-body"> <div class="cky-audit-table" data-cky-tag="audit-table" style="color:#d0d0d0;background-color:#2a2a2a;border-color:#474444"><p class="cky-empty-cookies-text">No cookies to display.</p></div> </div> </div><div class="cky-accordion" id="ckyDetailCategoryperformance"> <div class="cky-accordion-item"> <div class="cky-accordion-chevron"><i class="cky-chevron-right"></i></div> <div class="cky-accordion-header-wrapper"> <div class="cky-accordion-header"><button class="cky-accordion-btn" aria-label="Performance" data-cky-tag="detail-category-title" style="color:#d0d0d0">Performance</button><span class="cky-always-active">Always Active</span> <div class="cky-switch" data-cky-tag="detail-category-toggle"><input type="checkbox" id="ckySwitchperformance"></div> </div> <div class="cky-accordion-header-des" data-cky-tag="detail-category-description" style="color:#d0d0d0"> <p>Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.</p></div> </div> </div> <div class="cky-accordion-body"> <div class="cky-audit-table" data-cky-tag="audit-table" style="color:#d0d0d0;background-color:#2a2a2a;border-color:#474444"><p class="cky-empty-cookies-text">No cookies to display.</p></div> </div> </div><div class="cky-accordion" id="ckyDetailCategoryadvertisement"> <div class="cky-accordion-item"> <div class="cky-accordion-chevron"><i class="cky-chevron-right"></i></div> <div class="cky-accordion-header-wrapper"> <div class="cky-accordion-header"><button class="cky-accordion-btn" aria-label="Advertisement" data-cky-tag="detail-category-title" style="color:#d0d0d0">Advertisement</button><span class="cky-always-active">Always Active</span> <div class="cky-switch" data-cky-tag="detail-category-toggle"><input type="checkbox" id="ckySwitchadvertisement"></div> </div> <div class="cky-accordion-header-des" data-cky-tag="detail-category-description" style="color:#d0d0d0"> <p>Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.</p></div> </div> </div> <div class="cky-accordion-body"> <div class="cky-audit-table" data-cky-tag="audit-table" style="color:#d0d0d0;background-color:#2a2a2a;border-color:#474444"><p class="cky-empty-cookies-text">No cookies to display.</p></div> </div> </div> </div></div><div class="cky-footer-wrapper"> <span class="cky-footer-shadow"></span> <div class="cky-prefrence-btn-wrapper" data-cky-tag="detail-buttons"> <button class="cky-btn cky-btn-reject" aria-label="Reject All" data-cky-tag="detail-reject-button" style="color:#d0d0d0;background-color:transparent;border-color:#d0d0d0"> Reject All </button> <button class="cky-btn cky-btn-preferences" aria-label="Save My Preferences" data-cky-tag="detail-save-button" style="color:#d0d0d0;background-color:transparent;border-color:#d0d0d0"> Save My Preferences </button> <button class="cky-btn cky-btn-accept" aria-label="Accept All" data-cky-tag="detail-accept-button" style="color:#d0d0d0;background-color:#1863dc;border-color:#1863dc"> Accept All </button> </div></div></div></div></script><!-- Matomo --> <script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//all2.atico-jo.com/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Matomo Code --> <div id="autocomplete-suggestions" class="autocomplete-suggestions"></div><div id="is-scroller-outer"><div id="is-scroller"></div></div><div id="fb-root"></div> <div id="tie-popup-search-desktop" class="tie-popup tie-popup-search-wrap" style="display: none;"> <a href="#" class="tie-btn-close remove big-btn light-btn"> <span class="screen-reader-text">Close</span> </a> <div class="popup-search-wrap-inner"> <div class="live-search-parent pop-up-live-search" data-skin="live-search-popup" aria-label="Search"> <form method="get" class="tie-popup-search-form" action="https://freesourcelibrary.com/"> <input class="tie-popup-search-input " inputmode="search" type="text" name="s" title="Search for" autocomplete="off" placeholder="Type and hit Enter" /> <button class="tie-popup-search-submit" type="submit"> <span class="tie-icon-search tie-search-icon" aria-hidden="true"></span> <span class="screen-reader-text">Search for</span> </button> </form> </div><!-- .pop-up-live-search /--> </div><!-- .popup-search-wrap-inner /--> </div><!-- .tie-popup-search-wrap /--> <div id="tie-popup-search-mobile" class="tie-popup tie-popup-search-wrap" style="display: none;"> <a href="#" class="tie-btn-close remove big-btn light-btn"> <span class="screen-reader-text">Close</span> </a> <div class="popup-search-wrap-inner"> <div class="live-search-parent pop-up-live-search" data-skin="live-search-popup" aria-label="Search"> <form method="get" class="tie-popup-search-form" action="https://freesourcelibrary.com/"> <input class="tie-popup-search-input is-ajax-search" inputmode="search" type="text" name="s" title="Search for" autocomplete="off" placeholder="Search for" /> <button class="tie-popup-search-submit" type="submit"> <span class="tie-icon-search tie-search-icon" aria-hidden="true"></span> <span class="screen-reader-text">Search for</span> </button> </form> </div><!-- .pop-up-live-search /--> </div><!-- .popup-search-wrap-inner /--> </div><!-- .tie-popup-search-wrap /--> <script type="text/javascript" src="https://freesourcelibrary.com/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-consent-mode-3d6495dceaebc28bcca3.js" id="googlesitekit-consent-mode-js"></script> <script type="text/javascript" id="tie-scripts-js-extra"> /* <![CDATA[ */ var tie = {"is_rtl":"","ajaxurl":"https:\/\/freesourcelibrary.com\/wp-admin\/admin-ajax.php","is_side_aside_light":"","is_taqyeem_active":"","is_sticky_video":"","mobile_menu_top":"","mobile_menu_active":"area_1","mobile_menu_parent":"","lightbox_all":"true","lightbox_gallery":"true","lightbox_skin":"dark","lightbox_thumb":"horizontal","lightbox_arrows":"true","is_singular":"1","autoload_posts":"","reading_indicator":"","lazyload":"","select_share":"true","select_share_twitter":"","select_share_facebook":"","select_share_linkedin":"","select_share_email":"","facebook_app_id":"5303202981","twitter_username":"","responsive_tables":"true","ad_blocker_detector":"","sticky_behavior":"upwards","sticky_desktop":"true","sticky_mobile":"true","sticky_mobile_behavior":"default","ajax_loader":"<div class=\"loader-overlay\"><div class=\"spinner-circle\"><\/div><\/div>","type_to_search":"1","lang_no_results":"Nothing Found","sticky_share_mobile":"true","sticky_share_post":"","sticky_share_post_menu":""}; /* ]]> */ </script> <script type="text/javascript" src="https://freesourcelibrary.com/wp-content/themes/jannah/assets/js/scripts.min.js?ver=7.0.2" id="tie-scripts-js"></script> <script type="text/javascript" id="tie-scripts-js-after"> /* <![CDATA[ */ jQuery.ajax({ type : "GET", url : "https://freesourcelibrary.com/wp-admin/admin-ajax.php", data : "postviews_id=212052&action=tie_postviews", cache: !1, success: function( data ){ jQuery(".single-post-meta").find(".meta-views").html( data ); } }); /* ]]> */ </script> <script type="text/javascript" src="https://freesourcelibrary.com/wp-content/themes/jannah/assets/ilightbox/lightbox.js?ver=7.0.2" id="tie-js-ilightbox-js"></script> <script type="text/javascript" src="https://freesourcelibrary.com/wp-content/themes/jannah/assets/js/sliders.min.js?ver=7.0.2" id="tie-js-sliders-js"></script> <script type="text/javascript" src="https://freesourcelibrary.com/wp-content/themes/jannah/assets/js/shortcodes.js?ver=7.0.2" id="tie-js-shortcodes-js"></script> <script type="text/javascript" src="https://freesourcelibrary.com/wp-content/themes/jannah/assets/js/desktop.min.js?ver=7.0.2" id="tie-js-desktop-js"></script> <script type="text/javascript" src="https://freesourcelibrary.com/wp-content/themes/jannah/assets/js/live-search.js?ver=7.0.2" id="tie-js-livesearch-js"></script> <script type="text/javascript" src="https://freesourcelibrary.com/wp-content/themes/jannah/assets/js/single.min.js?ver=7.0.2" id="tie-js-single-js"></script> <script type="text/javascript" id="wp-consent-api-js-extra"> /* <![CDATA[ */ var consent_api = {"consent_type":"","waitfor_consent_hook":"","cookie_expiration":"30","cookie_prefix":"wp_consent"}; /* ]]> */ </script> <script type="text/javascript" src="https://freesourcelibrary.com/wp-content/plugins/wp-consent-api/assets/js/wp-consent-api.min.js?ver=1.0.8" id="wp-consent-api-js"></script> <script> WebFontConfig ={ google:{ families: [ 'Poppins:600,regular:latin&display=swap' ] } }; (function(){ var wf = document.createElement('script'); wf.src = '//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js'; wf.type = 'text/javascript'; wf.defer = 'true'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wf, s); })(); </script> </body> </html><!-- WP Fastest Cache file was created in 0.20342779159546 seconds, on 20-12-24 14:09:56 --><!-- via php --><script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="7cf89bdf952b6c0097eb671c-|49" defer></script>