» Главная
eXcode.ru » Статьи » Web » XSLT
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 22







Шаблонизация на XSLT. Приемы и примеры (Часть 2)




Автор: Александр Календарев, 19 марта 2005

Если что-то не получается.

К сожалению, существующие XSLT-процессоры не имеют средств отладки. Приходится применять [дедовские способы] и [идти по шагам к цели], т.е. идти от разработки общих шаблонов к разработке частных шаблонов. Иначе это называют проектированием сверху вниз.

Как правило, разработка шаблонов соответствует порядку разбора шаблонов, т.е. начинается с корневого элемента xml-данных. Может само обрамление дизайна – это уже дело рук самого дизайнера, но заготовку в виде пустого шаблона <xsl:template match="root"> надо предусмотреть. И пошли так далее, углубляясь по ходу обработки структуры xml- данных.

Если шаблон ничего не выводит, то надо проверить:

* вызывается ли вообще данный шаблон (применяется ли к нему шаблонное правило)
* наличие данных, обрабатываемых данным шаблоном
* результат преобразования.

Первое (вызывается ли вообще данный шаблон) проверяется довольно просто заменой нашего шаблона конструкцией типа:

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>
<xsl:template match="item">
**********
</xsl:template >
</td></tr></table>

Если шаблон вызывался (применялось к нему шаблонное правило), то в результирующем документе увидим наши звездочки.

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

Копирование узла осуществляется заменой нашего шаблона на следующую конструкцию:

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>
<xsl:template match="item">
<node>
<xsl:copy-of select="."/>
</node>
</xsl:template >
</td></tr></table>

Результатом применения будет текст, содержащий значение текущего узла, обрамленного тегами <node>.

Определение имени обрабатываемого узла осуществляется заменой нашего шаблона на такой:

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>
<xsl:template match="item">
<name>
<xsl:value-of select="name(.)"/>
</name>
</xsl:template >
</td></tr></table>

Результатом применения будет текст, содержащий имя текущего узла, обрамленного тегами <name>.

Иногда полезно знать положение узла в контексте, тогда применим функцию position() к текущему узлу. Использование этой функции позволяет нам увидеть динамику прохода, т.е. применение шаблонных правил к текущей ветке xml-документа. Как правило, функцию position() применяют в циклах <xsl:for-each>, но иногда применяют и к вызовам шаблонных правил.

Проверка результата преобразования - это моделирование части работы шаблона (или всего полностью). Как и всякое моделирование, оно заключается в подготовке входных данных, которые должны представлять часть нашего xml-документа, самого шаблонного правила, т.е. набора части задействованных шаблонов, и, соответственно, простого скрипта преобразования, суть действий которого – взять файл xml-документа с диска, файл xsl-шаблона и вывести результат преобразования.
К началу статьи





Добавил: LedWormДата публикации: 2005-07-18 22:00:21
Рейтинг статьи:3.33 [Голосов 6]Кол-во просмотров: 7042

Комментарии читателей

Всего комментариев: 0
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Какой язык интерфейса Вы используете в своих программах?
Русский
55% (111)
Английский
26% (53)
Немецкий
0% (0)
Французский
1% (3)
Несколько языков
10% (21)
Никакой :)
0% (0)
Использую только картинки
0% (1)
Что такое интерфейс?
6% (13)

Проголосовало: 202
Интернетчик является утром домой. Жена спрашивает:
- Где был?!
- У любовницы...
- Врешь, опять всю ночь в Интернете просидел!
Рейтинг: 5/10 (3)
Посмотреть все анекдоты

 
eXcode.ru » Статьи » Web » XSLT