Что нового в XSLT2
Что нового в XSLT/XPath 2.0? Почему я выбираю его для повседневной работы?
Группировка. Сколько вам потребовалось времени, чтобы запомнить синтаксис группировки Мюнха? Сколько раз вы ошибались при ее написании? Теперь все это в прошлом.
<xsl:for-each-group select="/page/statistics/event" group-by="@user">
<h1><xsl:value-of select="current-grouping-key()"/></h1>
<xsl:for-each select="current-group()">
<!-- а здесь работаем с текущей группой -->
</xsl:for-each>
</xsl:for-each-group>
Работа со строками. Надоело использовать рекурсивный вызов именованных шаблонов? XSLT 2.0 приходит на помощь. Функции replace и match, работающие с регулярными выражениями, возможность объявлять свои функции и множество нововведений в области работы со строками.
<xsl:value-of select="replace(text(), '\s+[-–—]\s+’, ‘ — ‘)”/>
Вывод в несколько файлов (xsl:result-document).
<xsl:template match="node">
<!-- вывод в основной поток -->
<a href="{position()}.html"><xsl:value-of select="@attr"/></a>
<!-- вывод в другой поток -->
<xsl:result-document href="{position()}.html">
<xsl:apply-templates/>
</xsl:result-document>
</xsl:template>
XPath 2.0. XPath стал полноценным языком программирования.
for $row in //tr return
if (count( $row/td ) > 3)
then "many"
else "few"
Новые функции и операторы. every, intersect, except, итд.
Вывод XHTML. Наконец-то можно полноценно выводить XHTML без «грязных хаков».
<xsl:output method="xhtml"
media-type="application/xhtml+xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />
Последовательности (Sequences). В XPath 2.0 каждый оператор возвращает последовательность. Последовательность может содержать как набор узлов, так и атомарные значения.
<xsl:variable name="nodesetvar">
<mynode>
<child>wow</child>
</mynode>
</xsl:variable>
<xsl:apply-templates select="$nodesetvar"/>