Вход/Регистрация
XSLT
вернуться

Холзнер Стивен

Шрифт:

<xsl:value-of select="NAME"/>

</U>

</xsl:when>

<xsl:otherwise>

<PRE>

<xsl:value-of select="."/>

</PRE>

</xsl:otherwise>

 </xsl:choose>

</xsl:template>

</xsl:stylesheet>

Вот результирующий документ:

<HTML>

 <HEAD>

<TITLE>

Planets

</TITLE>

 </HEAD>

 <BODY>

<B>Mercury</B>

<I>Venus</I>

<U>Earth</U>

 </BODY>

</HTML>

Как вы видели, при помощи

<xsl:if>
можно проверять единственное условие, а при помощи
<xsl:choose>
— несколько; аналогичные конструкции присутствуют в большинстве языков программирования. Кроме подобных этим условных операторов, в большей части языков программирования существуют также операторы цикла, и в XSLT содержится нечто похожее — элемент
<xsl:for-each>
.

Элемент <xsl:for-each>

Элемент

<xsl:for-each>
позволяет применять тело шаблона в цикле снова и снова для всех элементов набора узлов. С технической точки зрения, он работает с набором узлов, который возвращает выражение XPath и выполняет одно и то же действие с каждым узлом в наборе. При каждом шаге цикла тело шаблона применяется к следующему узлу из набора узлов, что дает возможность легко обрабатывать несколько узлов.

<XSL:FOR-EACH> ПРОТИВ <XSL:APPLY-TEMPLATES>

Вы могли заметить, что это описание практически такое же, как и у элемента <xsl:apply-templates>, и я сравню элементы <xsl:for-each> и <xsl:apply-templates> через несколько страниц.

У элемента

<xsl:for-each>
один атрибут:

• 

select
(обязательный). Принимает значение выражения XPath, возвращающее набор узлов, который нужно обработать в цикле.

Элемент может содержать ноль или более элементов

<xsl:sort>
, за которыми следует тело шаблона. Работу с элементом
<xsl:sort>
мы изучим позже в этой главе.

В теле шаблона функция

position
возвращает позицию текущего узла в наборе узлов, a
last
возвращает число узлов в наборе. Если
<xsl:sort>
не используется, узлы обрабатываются в порядке документа (в порядке, в котором они перечислены в документе); если же используется элемент
<xsl:sort>
, набор узлов будет сначала отсортирован в порядке, заданном этим элементом.

Предположим, нам нужно отформатировать все названия планет, заключив их в элементы HTML

<Р>
, — это можно сделать следующим образом:

<xsl:template match="PLANET">

 <Р>

<xsl:value-of select="NAME"/>

 

</xsl:template>

Но что делать, если у некоторых планет по два названия, как, например:

<PLANET>

 <NAME>Mercury</NAME>

 <NAME>Closest planet to the sun</NAME>

 <MASS UNITS="(Earth = 1)">.0553</MASS>

 <DAY UNITS="days">58.65</DAY>

 <RADIUS UNITS="miles">1516</RADIUS>

 <DENSITY UNITS="(Earth = 1)">.983</DENSITY>

 <DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->

</PLANET>

Это проблема, поскольку атрибут

select
элемента
<xsl:value-of>
сам по себе выберет только первый элемент
<NAME>
. Чтобы пройти в цикле все возможные варианты, вместо него следует применить элемент
<xsl:for-each>
(листинг 5.7).

Листинг 5.7. Применение <xsl:for-each>

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  • Читать дальше
  • 1
  • ...
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: