XSLT

在電腦科學中，可延伸樣式表轉換語言（英語：Extensible Stylesheet Language Transformations，縮寫XSLT）是一種樣式轉換標記語言，可以將XML資料檔轉換為另外的XML或其它格式，如HTML網頁，純文字。XSLT最末的T字母表示英語中的「轉換」（transformation）。它是XSL規範中的一部分，目前最新的建議版本為XSL 3.0。
以XSLT進行格式轉換不會變動原始的資料檔案；而會以現有資料產生新的內容格式。作為輸入的通常是XML資料檔，或者由支援XQuery和XPath的資料模型處理器，其他來源的資料也能轉換，例如關聯式資料庫表格或地理資訊系統。
XSL規範的另一部分是XSLF（Formatting Objects，代表格式化物件）,又稱XSL-FO或XSLFO，目前已逐漸被CSS 3.0所取代。XSLT是一種圖靈完備的語言，它可以指定電腦能執行的任何計算。

設計模型與處理

XSLT處理器會取用一或多個XML源資料檔，加上一或多個XSLT樣式表，並處理它們以產生輸出檔案。與廣泛實作的指令式程式語言（例如C程式語言）相反，XSLT是宣告式的。基本處理的範式是模式配比。模板規則只定義如何處理特定XPath模式相符的節點，而不是列出在具有狀態的環境中執行的一系列動作；處理器在遇到某一模式符合時，那麼模板規則的內容就包含了，以函數式語句評估的直接成果：即結果樹，它是處理器輸出的基礎。
處理器遵循固定的演算法。首先，假設樣式表已經讀取和準備好了，處理器從輸入的XML資料檔建立來原始碼樹。然後處理來源樹的根節點，在樣式表中找到該節點相符的最佳模板，並評估模板的內容。每一個模板中的指令通常要求處理器在結果樹中產生節點，或者與根節點相同的方式，處理來源樹中的其它節點。從結果樹中取得輸出。

效能

早期大多數的XSLT處理器都是直譯器。近來位元組碼越來越普遍，使用可移植的中間語言（如Java位元組碼或.NET中間語言）作為目標。然而，即使是直譯器的成品通常也提供單獨的分析和執行階段，允許在記憶體中建立最佳化的表達式樹，並可重複使用以執行多重轉換。在線上發行應用程式時，這方式有顯著的效能優勢，其中同樣的轉換每秒可多次應用在不同的來源檔之上。這種分離處理反映在XSLT處理器的應用編程介面（如JAXP）的設計中。
早期XSLT處理器很少被最佳化過。讀取的樣式表成為文件物件模型，而XSLT處理器會直接對它們產生作用。XPath引擎也沒有被最佳化過。但是漸增地，XSLT處理器利用了函數式編程和資料庫查詢語言中發現的最佳化技術，例如表達式樹的靜態重寫（例如，將計算移出迴圈），以及惰性的串流評估來減少過程中所佔記憶體的足跡（允許處理器對子表達式求值時，「提早退出」而不必執行全部，例如following-sibling::*[1]）。許多處理器還使用比一般DOM實作更有效率（在空間和時間上）的樹表達式。
2014年6月，Debbie Lockett和Michael Kay推出了一個開放原始碼的標竿測試框架，名稱為XT-Speedo。

XPath

XSLT使用XPath來選取資料來源樹的節點集合，並執行相關的轉換運算。XPath還提供了一系列功能，XSLT則將其功能進一步強化。在3.0版本前的XSLT，使用的XPath版本都是相對應的。到了XSLT 3.0版本則將與XPath 3.0或3.1 配合使用。在之前的版本，XSLT和XPath規範在同一天發布。然而到了XSLT 3.0版本，它不再和XPath的版本同步；XPath 3.0於2014年4月成為推薦書，接著是2017年2月的XPath 3.1；於2017年6月時才推出了XSLT 3.0版本。

與 XQuery 比較

XSLT與XQuery的功能之間有互相重疊的部份，XQuery最初被認為是大型XML資料檔集合的查詢語言。XSLT 2.0和XQuery 1.0標準是由W3C內的不同工作群組開發的，它們彼此合作以確保處理作法可以共通地適用。它們都使用相同的資料模型，型別系統和函式庫，並且都包括了XPath 2.0作為子語言。
但這兩種語言因服務於不同社群的需求，而根植於不同的傳統上。XSLT主要被認為是一種樣式語言，主要目標是在網路（當作網頁模板）、在螢幕或紙張，呈現給人類讀者觀看的XML。而XQuery則類比為傳統中的資料庫查詢語言。因為這兩種語言起源於不同的社群，XSLT偏重於處理彈性的敘述式資料應用上，而XQuery則偏重在資料處理方面，例如執行關係聯結的操作。

媒體類型

<output>元素可以設定媒體類型的屬性media-type，將結果輸出為該媒體類型（或MIME），例如：
<xsl：output output =“xml”media-type =“application/xml“/>
長時間以來在網際網路上沒有XSLT的註冊媒體類型，text/xsl為實用上的標準。XSLT 1.0規範建議泛用化的屬性text/xml和application/xml，但其中沒有指出媒體類型的屬性值應當如何使用。隨著XSLT 2.0的發表，W3C推薦使用MIME媒體類型application/xslt+xml，之後這種類型已在IANA註冊。
1.0之前的XSLT工作草案在範例中使用了text/xsl，微軟在Internet Explorer和MSXML產品中採用這一媒體類型，而其他瀏覽器的xml樣式表處理指令也廣泛的認可。所以在實作中，瀏覽器使用者若想以處理指令來轉換XML，應使用這種未註冊的媒體類型。

範例

關於分組問題請參閱XSLT/Muenchian分組。以下是當作範例中輸入的XML文件內容：
<?xml version="1.0" ?><persons>
  <person username="JS1">
    <name>John</name>
    <family-name>Smith</family-name>
  </person>
  <person username="MI1">
    <name>Morka</name>
    <family-name>Ismincius</family-name>
  </person></persons>

例一（從XSL轉換為XML）

以下XSLT樣式表提供了轉換 XML 文件的模板：
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/persons">
    <root>
      <xsl:apply-templates select="person"/>
    </root>
  </xsl:template>

  <xsl:template match="person">
    <name username="{@username}">
      <xsl:value-of select="name" />
    </name>
  </xsl:template></xsl:stylesheet>
它的評估結果是一個新的XML文件，有另一種結構：
<?xml version="1.0" encoding="UTF-8"?><root>
  <name username="JS1">John</name>
  <name username="MI1">Morka</name></root>

例二（從XML轉換為XHTML）

如應用以下XSLT樣式表：
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="xml" indent="yes" encoding="UTF-8"/>

  <xsl:template match="/persons">
    <html>
      <head> <title>Testing XML Example</title> </head>
      <body>
        <h1>Persons</h1>
        <ul>
          <xsl:apply-templates select="person">
            <xsl:sort select="family-name" />
          </xsl:apply-templates>
        </ul>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="person">
    <li>
      <xsl:value-of select="family-name"/><xsl:text>, </xsl:text><xsl:value-of select="name"/>
    </li>
  </xsl:template></xsl:stylesheet>
將XML輸入檔案轉換則產生如下XHTML（為了清楚起見，空格已被調整）：
<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml">
  <head> <title>Testing XML Example</title> </head>
  <body>
    <h1>Persons</h1>
      <ul>
        <li>Ismincius, Morka</li>
        <li>Smith, John</li>
      </ul>
  </body></html>
網路瀏覽器中顯示時，此XHTML會產生如下的輸出。
為了使網路瀏覽器能夠自動將XSL轉換應用於顯示的XML文件，XML的樣式表處理指令可插入XML中。因此若上例二中的樣式表為「example2.xsl」，則以下指令將把它添加到原來輸入的XML中：
<?xml-stylesheet href="example2.xsl" type="text/xsl" ?>
本範例中，根據W3C規範（其類型應為text/xml），在技術上text/xsl類型是不正確的，但它是2009年以來唯一在瀏覽器之間，有廣泛支援的媒體類型。