8 Повторение

<!-- Category: instruction -->
<xsl:for-each
  select = node-set-expression>
  <!-- Content: (xsl:sort*, template) -->
</xsl:for-each>

Если результат имеет известную регулярную структуру, полезно иметь возможность указать это прямо в шаблоне для собираемых узлов. Инструкция xsl:for-each содержит шаблон, который обрабатывается для каждого узла, отобранного выражением, указанным в атрибуте select. Атрибут select является обязательным. Результатом обработки выражения должен быть набор узлов. При обработке шаблона выбранный узел берется в качестве текущего узла, а весь список собранных узлов берется в качестве текущего набора узлов. Узлы обрабатываются в том порядке как они следуют в документе, если нет указаний относительно сортировки (см. [10 Сортировка]).

Например, дан XML документ со следующей структурой

<customers>
  <customer>
    <name>...</name>
    <order>...</order>
    <order>...</order>
  </customer>
  <customer>
    <name>...</name>
    <order>...</order>
    <order>...</order>
  </customer>
</customers>

Следующий пример должен создать HTML документ, содержащий таблицу, где каждому элементу customer отводится отдельная строка.

<xsl:template match="/">
  <html> 
    <head> 
      <title>Customers</title> 
    </head>
    <body>
      <table>
	<tbody>
	  <xsl:for-each select="customers/customer">
	    <tr>
	      <th>
		<xsl:apply-templates select="name"/>
	      </th>
	      <xsl:for-each select="order">
		<td>
		  <xsl:apply-templates/>
		</td>
	      </xsl:for-each>
	    </tr> 
	  </xsl:for-each>
	</tbody>
      </table> 
    </body>
  </html>
</xsl:template>

Назад | Содержание | Вперед