Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 'xsl:apply-templates' и 'xsl:call-template' 
V
    Опции темы
t77
  Дата 14.3.2010, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Доброе время суток.
Собственно вопрос в том, чем отличается
'xsl:apply-templates'
от
'xsl:call-template'
И еще не понятна строка:
Код

<xsl:apply-templates select="child::*">

Что именно здесь вызывается ??
Может кто может закоментить данную строку...?
Спасибо
PM MAIL   Вверх
diadiavova
Дата 14.3.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



apply-templates вызывает все узлы-потомки текущего узла, которые обрабатываются в соответствии с сопоставленными с ними шаблонами, call-template вызывает конкретный шаблон по имени.
Атрибут select означает, что отбираться будут не все узлы, а только те, которые соответствуют выражению(в данном случае, на сколько я понимаю, никакого эффекта это производить не должно).

Это сообщение отредактировал(а) diadiavova - 14.3.2010, 15:41


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
t77
  Дата 15.3.2010, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



diadiavova, то, что касается call-template, понятно...
А вот - apply-templates, не понятно... Приведите пожалуйста небольшой пример. smile 
PM MAIL   Вверх
diadiavova
Дата 15.3.2010, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(t77 @  15.3.2010,  15:08 Найти цитируемый пост)
А вот - apply-templates, не понятно... Приведите пожалуйста небольшой пример.

Атрибут select содержит выражение, которое должно возвращать список узлов документа. По умолчанию(когда атрибут отсутствует) это подразумевает узлы-непосредственные потомки того узла, который обрабатывается в момент вызова данного элемента apply-template. При этом надо понимать, что в конечный документ узлы обычно попадают не в том виде, в котором они находятся в исходном документе, а в обработанном при помощи какого-нибудь шаблона(строго говоря шаблон является функцией, обрабатывающей узел или другие данные). Если тебе надо обработать узел исходного документа, при помощи конкретного шаблона, то сделать это можно, просто вызвав шаблон по имени(call-template), но обычной логикой является поручение выбора самому xslt-процессору. Например мы имеем такой фрагмент документа
Код

<a>
  <b></b>
  <b></b>
  <c>
    <b></b>
  </c>
</a>
далее мы обрабатываем элемент a и из шаблона его обработки вызываем apply-template без селектора, то есть в том месте, где находится этот элемент следует вставить результат обработки первых двух узлов b и узла с. Но возникает вопрос: "какими шаблонами их обрабатывать? smile ". И тут в дело вступает следующая логика: для каждого узла в документе ищутся шаблоны, которые ему подходят(это определяется с помощью атрибута match самого шаблона), далее из всех шаблонов выбирается именно тот, у которого наивысший приоритет соответствия этому узлу. Логика приоритетов достаточно сложна и она подробно описана в спецификации стандарта(и, очевидно, в учебниках), но пример привести могу.
если мы имеем шаблонs
Код

<xsl:template match="b">
...............
<xsl:template match="a/b">
..................
<xsl:template match="a/b[1]">

 То они все соответствуют тому узлу b в данном фрагменте, который идёт первым в нём, но...первый вариант соответствует любому из этих узлов, второй - только первым двум, а третий - только самому первому. В такой ситуации из всех шаблонов для первого узла b будет выбран третий вариант(как наиболее специфичный), для второго - второй(третий для него вообще не подходит, а второй указывает на него как на потомка узла a, что является уточняющей информацией, поскольку первый вариант годится для всех узлов b, а второй - нет), а для третьего узла b подойдёт единственный шаблон под номером 1, поскольку остальные два годятся только для тех узлов b, которые являются потомками узла a, а для него это не верно.




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
t77
Дата 21.3.2010, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



СПАСИБО.
Тема закрыта.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0683 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.