<xsl:apply-templates
select = node-set-expression
mode = qname >
<!– Content: (xsl:sort|xsl:with-param)* ->
</xsl:apply-templates>
В данном примере для элемента
<xsl:template match='chapter'>
<fo:block>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
В отсутствие атрибута
Чтобы обрабатывать не все непосредственные потомки, а лишь узлы, отобранные по некому выражению, может использоваться атрибут
<xsl:template match='author-group'>
<fo:inline-sequence>
<xsl:apply-templates select='author'/>
</fo:inline-sequence>
</xsl:template>
В следующем примере обрабатываются все содержащиеся в
<xsl:template match='author-group'>
<fo:inline-sequence>
<xsl:apply-templates select='author/given-name'/>
</fo:inline-sequence>
</xsl:template>
В данном примере обрабатываются все элементы
<xsl:template match='book'>
<fo:block>
<xsl:apply-templates select='.//heading'/>
</fo:block>
</xsl:template>
Есть также возможность обрабатывать элементы, которые не являются потомками текущего узла. В данном примере предполагается, что элемент
<xsl:template match='employee'>
<fo:block>
Employee <xsl:apply-templates select='name'/> belongs to group <xsl:apply-templates select='ancestor::department/group'/>
</fo:block>
</xsl:template>
Для выполнения простого переупорядочения в пределах одного шаблона можно использовать сразу несколько элементов
<xsl:template match='product'>
<table>
<xsl:apply-templates select='sales/domestic'/>
</table>
<table>
<xsl:apply-templates select='sales/foreign'/>
</table>
</xsl:template>
Замечание: Может оказаться, что шаблону соответствуют два потомка, причем один из них является потомком другого. Как-то особенно такой случай не обрабатывается: оба потомка будут обработаны обычным образом. Например, дан исходный документ
<doc><div><div></div></div></doc>
правило
<xsl:template match='doc'>
<xsl:apply-templates select='.//div'/>
</xsl:template>