Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Никто при разработке больших проектов не будет верстать все в статике, а затем просить "девелопера" переводить все на XSLT-шаблоны.
3. Плохие верстальщики не хотят знать XSL. Хороших можно научить.
Сейчас верстальщики все еще не знают XSL)
Каково принципиальное отличие от тех же пхпшных шаблонизаторов, от того же популярного смарти?
<xsl:template match="/node()"> </xsl:template> - шаблон для элемента /node() (корневого). Вместо /node() можно указать //document, т.к. он у нас являеться корневым узлом.
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="document">
...
</xsl:template>
<xsl:variable name="current-section" select="/*/@id" /> я постараюсь поговорить позже. Это действительно удобнее. Просто, нужно будет еще объяснить переменные XSL.<menu><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/list">
<table>
<xsl:apply-templates select="item[count(preceding-sibling::item) <= count(following-sibling::item)]" mode="tr"/>
</table>
</xsl:template>
<xsl:template match="item" mode="tr">
<xsl:variable name="pos" select="ceiling(count(../item) div 2)"/>
<tr>
<xsl:apply-templates select="." mode="td"/>
<xsl:apply-templates select="following-sibling::item[$pos]" mode="td"/>
</tr>
</xsl:template>
<xsl:template match="item" mode="td">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>
<xsl:variable name="totalItems"><xsl:value-of select="count(//list/item)"/></xsl:variable>
<xsl:variable name="totalItemsHalf"><xsl:value-of select="$totalItems div 2"/></xsl:variable>
<xsl:template match="//document">
<html>
<body>
<table border="1">
<xsl:apply-templates select="//list/item" mode="list"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="item" mode="list">
<xsl:variable name="cur">
<xsl:value-of select="position()"/>
</xsl:variable>
<xsl:variable name="next">
<xsl:value-of select="$totalItemsHalf + $cur"/>
</xsl:variable>
<tr>
<xsl:choose>
<xsl:when test="position() > $totalItems div 2"></xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="text()"/></td>
<td><xsl:value-of select="parent::*/item[position() = $next]/text()"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:template>
Практический XSLT. Использование в качестве шаблонизатора