1.) Удалить имя класса 'foo' из всех элементов div
<xsl:template match="div[contains(concat(' ', @class, ' '), ' foo ')]">
<xsl:copy>
<xsl:attribute name="class">
<xsl:variable name="s" select="substring-before(concat(' ', @class, ' '), ' foo ')" />
<xsl:variable name="e" select="substring-after(concat(' ', @class, ' '), ' foo ')" />
<xsl:value-of select="normalize-space(concat($s, ' ', $e))" />
</xsl:attribute>
<xsl:apply-templates select="node() | @*[not(self::@class)]" />
</xsl:copy>
</xsl:template>
2.) Удалить узел, если он пустой (т. Е. <p></p>
)
<xsl:template match="*[normalize-space() = '']" />
3.) Удалить узел
, если его первый дочерний элемент равен <br>
<xsl:template match="p[*[1]/self::br]" />
4.) Добавить newattr="newvalue"
ко всем <h1>
<xsl:template match="h1[not(@newattr)]">
<xsl:copy>
<xsl:attribute name="newattr">
<xsl:value-of select="'newvalue'" />
</xsl:attribute>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
5.) Заменить заголовок в текстовых узлах на заголовок
<!-- This replaces the first occurrence of 'heading', case-sensitively.
More generic search-and-replace templates are plenty, here on SO as well as
elsewhere on the 'net. -->
<xsl:template match="text()[contains(concat(' ', ., ' '), ' heading ')]">
<xsl:variable name="s" select="substring-before(concat(' ', ., ' '), ' heading ')" />
<xsl:variable name="e" select="substring-after(concat(' ', ., ' '), ' title ')" />
<xsl:value-of select="normalize-space(concat($s, ' ', $e))" />
</xsl:template>
6.) Обернуть все теги <u>
в теги <b>
(т. Е. <u>foo</u>
-> <b><u>foo</u></b>
)
<xsl:template match="u[not(parent::*/self::b)]">
<b>
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</b>
</xsl:template>
7.) Вывести преобразованный документ без каких-либо изменений
<!-- the identity template copies everything that is not handled by
any of the more specific templates above -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
Порядок и специфичность шаблона определяют, какой шаблон «выигрывает», когда несколько шаблонов могут соответствовать одному узлу.
Более конкретно означает: «Из нескольких конкурирующих шаблонов выигрывает тот, который имеет более сложное правило соответствия».
Порядок означает: «Из нескольких конкурирующих шаблонов с одинаковой специфичностью побеждает тот, что позже в документе XSLT.