П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 3408 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 5957 раз(а).

Учебник HTML.
Просмотров 3201 раз(а).

Руководство по PHP5.
Просмотров 5418 раз(а).

Хостинг через призму DNS.
Просмотров 4017 раз(а).

Подборка текстов стандартных документов.
Просмотров 55707 раз(а).

Учебник PHP - Самоучитель
Просмотров 2994 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 4567 раз(а).

Внешние атаки...
Просмотров 3731 раз(а).

Учебник PHP.
Просмотров 2766 раз(а).

SSI в примерах.
Просмотров 37384 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Элемент XSL:IF - фильтр

Рассмотрим теперь способы фильтрации строк таблицы. Первый пример использует старый синтаксис. В нем условие фильтрации указывается непосредственно в атрибуте select (ex04-1.xml, ex04-1.xsl).

Ниже приведена строка, в которую мы внесли необходимые изменения.

xsl:for-each select="tutorial/enimals/dogs/dog[dogWeight$gt$10] " order-by="number(dogWeight); dogName;">

И таблица результатов.

Кличка Вес Цвет
Шарик 18 кг рыжий с черными подпалинами
Трезор 25 кг черный

Вы видите, что в таблице остались только те собаки, чей вес превышает 10 кг, причем первым стоит Шарик, чей вес меньше.

Все дальнейшие примеры в этом параграфе работают только под управлением XML-парсера версии 3.

Более гибкие возможности нам предоставляет новый синтаксис (ex04-2.xml, ex04-2.xsl). Обратите внимание - в новом синтаксисе атрибут order-by в элементе xsl:for-each не поддерживается, вместо него мы вставили два элемента xsl:sort.

<xsl:sort order="ascending" select="number(dogWeight)"/>
<xsl:sort order="ascending" select="dogName"/>

Кроме того, условие фильтра у нас вынесено в отдельный элемент xsl:if.

<xsl:if test="dogWeight&gt;10">

Не забывайте указывать конечный тег элемента xsl:if.

<xsl:if test="dogWeight&gt;10">
<tr bgcolor="#F5F5F5">
<td><xsl:value-of select="dogName"/></td>
<td align="right"><xsl:value-of select="dogWeight"/> <xsl:value-of select="dogWeight/@caption"/></td>
<td><xsl:value-of select="dogColor"/></td>
</tr>
</xsl:if>

В этом примере таблица результатов полностью аналогична предыдущей.

Кличка Вес Цвет
Шарик 18 кг рыжий с черными подпалинами
Трезор 25 кг черный

Полностью преимущества нового синтаксиса проявляются при использовании функций.

Рассмотрим следующий пример (ex04-3.xml, ex04-3.xsl). В этом примере используется функция position(), определяющая порядковый номер фрагмента в исходном XML-файле.

Соответствующий элемент xsl:if.

<xsl:if test="position()<3">

Результат.

Кличка Вес Цвет
Шарик 18 кг рыжий с черными подпалинами
Тузик 10 кг белый с черными пятнами

Продемонстрируем теперь использование более интересных функций - start-with(string,startSubstring) и contains(string,anySubstring). Функция start-with(string,startSubstring) проверяет, начинается ли строка string с подстроки  startSubstring. Пример - ex04-4.xml, ex04-4.xsl).

Синтаксис элемента xsl:if.

<xsl:if test="starts-with($varDogName,$varStartWith)">

В этом элементе мы использовали переменные. Значения переменных были инициализированы ранее

<xsl:variable name="varStartWith">Т</xsl:variable>
<xsl:for-each select="tutorial/enimals/dogs/dog">
<xsl:variable name="varDogName"><xsl:value-of select="dogName"/></xsl:variable>

Переменная varStartWith представляет собой подстроку, с которой должны начинаться требуемые нам клички. Она не меняется, поэтому инициализируется перед циклом. Переменная varDogName содержит кличку собаки, она меняется на каждом шаге цикла и, соответственно, инициализируется в теле цикла.

Результат.

Кличка Вес Цвет
Тузик 10 кг белый с черными пятнами
Трезор 25 кг черный

Функция contains(string,anySubstring) проверяет, содержит ли строка string подстроку  anySubstring. Пример - ex04-5.xml, ex04-5.xsl.

Синтаксис элемента xsl:if.

<xsl:if test="contains($varDogName,$varStartWith)">

Этот пример полностью аналогичен предыдущему.

Результат.

Кличка Вес Цвет
Бобик 2 кг бело-серый
Трезор 25 кг черный

Два элемента xsl:if, вложенные друг в друга, дают нам эффект оператора AND (ex04-6.xml, ex04-6.xsl).

Соответствующий фрагмент XSL-файла.

<xsl:if test="dogWeight&gt;10">
<xsl:if test="dogWeight&lt;20">
...
</xsl:if>
</xsl:if>

Результат.

Кличка Вес Цвет
Шарик 18 кг рыжий с черными подпалинами

Можно добиться и эффекта оператора OR. Для этого нам нужно включить два цикла, в каждом из которых формируется своя выборка   (ex04-7.xml, ex04-7.xsl).

Соответствующий фрагмент XSL-файла.

<xsl:for-each select="tutorial/enimals/dogs/dog">
<xsl:sort order="ascending" select="number(dogWeight)"/>
<xsl:if test="dogWeight&lt;10">
<tr bgcolor="#F5F5F5">
<td><xsl:value-of select="dogName"/></td>
<td align="right"><xsl:value-of select="dogWeight"/> <xsl:value-of select="dogWeight/@caption"/></td>
<td><xsl:value-of select="dogColor"/></td>
</tr>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="tutorial/enimals/dogs/dog">
<xsl:sort order="ascending" select="number(dogWeight)"/>
<xsl:if test="dogWeight&gt;15">
<tr bgcolor="#F5F5F5">
<td><xsl:value-of select="dogName"/></td>
<td align="right"><xsl:value-of select="dogWeight"/> <xsl:value-of select="dogWeight/@caption"/></td>
<td><xsl:value-of select="dogColor"/></td>
</tr>
</xsl:if>
</xsl:for-each>

Результат.

Кличка Вес Цвет
Бобик 2 кг бело-серый
Шарик 18 кг рыжий с черными подпалинами
Трезор 25 кг черный

Если сортировка не требуется, то можно вставить два элемента xsl:if в один элемент xsl:for-each.

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



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: