🔁 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 > 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"?>, в .NETXslCompiledTransform, в Javajavax.xml.transform.