🔁 XSLT

Преобразование XML: шаблоны, XPath, циклы, условия, сортировка и вывод HTML.

Шпаргалки · Данные · #xslt #xml #transform

Идея

XSLT-таблица стилей превращает один XML в другой XML, HTML или текст. Основа: шаблоны (template), которые срабатывают на узлах, выбранных XPath.

Минимальная таблица

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes" encoding="UTF-8"/>

  <xsl:template match="/">
    <html><body>
      <h1>Каталог</h1>
      <table>
        <xsl:apply-templates select="catalog/book">
          <xsl:sort select="price" data-type="number" order="descending"/>
        </xsl:apply-templates>
      </table>
    </body></html>
  </xsl:template>

  <xsl:template match="book">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="format-number(price, '#,##0.00')"/></td>
    </tr>
  </xsl:template>
</xsl:stylesheet>

Основные инструкции

Инструкция Назначение
xsl:template match="…" правило для узлов
xsl:apply-templates применить подходящие шаблоны к потомкам
xsl:value-of select="…" вставить текст значения
xsl:for-each select="…" цикл
xsl:if test="…" условие
xsl:choose / when / otherwise выбор из нескольких
xsl:sort сортировка
xsl:variable / xsl:param переменная / параметр
xsl:attribute / xsl:element создать атрибут / элемент
xsl:copy-of скопировать узел целиком
xsl:call-template вызвать именованный шаблон

Пример условий

<xsl:choose>
  <xsl:when test="price &gt; 1000">Дорого</xsl:when>
  <xsl:otherwise>Доступно</xsl:otherwise>
</xsl:choose>

В test символы < и > нужно экранировать.

Приёмы

  • Тождественное преобразование (копировать всё, менять точечно) опирается на шаблон match="@*|node()".
  • Версии: XSLT 1.0 (встроен в браузеры), 2.0 и 3.0 (Saxon): группировка for-each-group, функции, JSON.
  • Запуск: xsltproc style.xsl data.xml > out.html, Saxon, в браузере через <?xml-stylesheet type="text/xsl" href="style.xsl"?>, в .NET XslCompiledTransform, в Java javax.xml.transform.