<xsl:apply-templates

select = node-set-expression

mode = qname >

<!– Content: (xsl:sort|xsl:with-param)* ->

</xsl:apply-templates>

В данном примере для элемента chapter создается блок, а затем обрабатывается его непосредственный потомок.

<xsl:template match='chapter'>

<fo:block>

<xsl:apply-templates/>

</fo:block>

</xsl:template>

В отсутствие атрибута select инструкция xsl:apply- templates обрабатывает все непосредственные потомки текущего узла, включая узлы текста. Однако те текстовые узлы, которые были вычищены как описано в главе [3.4 Удаление пробельных символов], обрабатываться не будут. Если очистка узлов с пробельными символами для элемента не была разрешена, то все пробельные символы в содержимом этого элемента будут обрабатываться как текст, и, следовательно, пробельный символ между элементами – непосредственными потомками будет учитываться при вычислении положения элемента – непосредственного потомка, возвращаемого функцией position.

Чтобы обрабатывать не все непосредственные потомки, а лишь узлы, отобранные по некому выражению, может использоваться атрибут select. Значением атрибута select является выражение. После обработки этого выражения должен получиться набор узлов. Если нет указаний по сортировке (см. [10 Сортировка]), собранный перечень узлов обрабатывается в том порядке, как они следуют в документе. В следующем примере обрабатываются все непосредственные потомки author для этого элемента author- group:

<xsl:template match='author-group'>

<fo:inline-sequence>

<xsl:apply-templates select='author'/>

</fo:inline-sequence>

</xsl:template>

В следующем примере обрабатываются все содержащиеся в author элементы given-name, которые являются непосредственным потомком author-group:

<xsl:template match='author-group'>

<fo:inline-sequence>

<xsl:apply-templates select='author/given-name'/>

</fo:inline-sequence>

</xsl:template>

В данном примере обрабатываются все элементы heading, являющиеся потомками элемента book.

<xsl:template match='book'>

<fo:block>

<xsl:apply-templates select='.//heading'/>

</fo:block>

</xsl:template>

Есть также возможность обрабатывать элементы, которые не являются потомками текущего узла. В данном примере предполагается, что элемент department имеет непосредственный потомок group и потомки employee . Сперва находится отдел employee, а затем обрабатывается непосредственный потомок group элемента department.

<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:apply-templates. В следующем примере создаются две таблицы HTML. Первая таблица заполняется отечественными продажами, вторая – международными.

<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>

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×