Making world happy…

Что нового в 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"

Новые функции и операторыeveryintersectexcept, итд.

Вывод 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"/>

To Tumblr, Love Metalab