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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вернуть значение из темплейта 
:(
    Опции темы
sol78
Дата 19.4.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Помогите правельно вернуть значение из темплата:
Код

xsl:template name="tmpltGetBranchNextNode">
    <xsl:param name="curr"></xsl:param>
       .....
      xsl:choose>
      <xsl:when test="$curr/SibbDescriptor/@id != $END_BRANCH_TYPE">
      .....
         <xsl:variable name="outputList">
                  <xsl:call-template name="tmpltGetCellexOutputListByType">
                    <xsl:with-param name="type" select="$curr/SibbDescriptor/@id"></xsl:with-param>
                  </xsl:call-template>
            </xsl:variable>
             <xsl:for-each select="msxsl:node-set(msxsl:node-set($outputList)/Output)">
               <xsl:variable name="currOutput" select="current()"/>
                  <xsl:call-template name="tmpltLinker">
                    <xsl:with-param name="src" select="$srcId"></xsl:with-param>
                    <xsl:with-param name="dest" select="$destId"></xsl:with-param>
                    <xsl:with-param name="srcOp" select="$currOutput/@Name"></xsl:with-param>
                  </xsl:call-template>
             </xsl:for-each>
          ....
           рекурсивный вызов
           <xsl:call-template name="tmpltGetBranchNextNode">
          <xsl:with-param name="curr" select="$nextNode"></xsl:with-param>
            ....
        </xsl:when>
       выход без рекурсии
       <xsl:value-of select="$curr"/>
        </xsl:call-template>

 Почему на выходе в <xsl:value-of select="$curr"/>
я собираю весь 'мусор' (значения других переменных включая нужное). Как решить эту проблему?

Это сообщение отредактировал(а) sol78 - 19.4.2009, 23:00
PM MAIL   Вверх
sir_nuf_nuf
Дата 20.4.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



"Значение" темплейта составляется из всех данных которые были выведены при его обработке.
Наприрмер, простые тэги (не xsl), все value-of и т.п. которые не лежали внутри variable

Так же, замечу, что если у вас режимом обработки "по-умолчанию" для любого XML элемента - это вывод его содержимого.

Проверьте содержимое вашего темплейта на такие конструкции. Добавьте пустой шаблон для обработки тегов по умолчанию


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
sol78
Дата 20.4.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sir_nuf_nuf, немогли бы вы обьяснить что такое режим обработки "по умолчанию" для любого XML элемента  и как ето проверить?
PM MAIL   Вверх
sir_nuf_nuf
Дата 20.4.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sol78, ну есть два способа вызова темплейтов
1) call-template - когда вы явно указываете имя темплейта которой вызывать
2) apply-templates - когда XSLT сам выбирает темплейты подходящие под обрабатываемые тэги.
т.е. темплейты описываются как
Код

<xsl:template match="/aa/bla:bu">....</xsl:template>

или
Код

<xsl:template match="//bla:*">...</xsl:template>

а XSLT движок сам выбирает какой темплей применить в зависимости от тэгов.
(наприрмер первый темплейт более специфичен (точнее указано множество подходящих тегов), поэтому
к тэгам вида /aa/bla:bu - будет применен именно он,
ко всем тэгам в пространстве имен "bla", за исключением тех которые попадают в первый пункт будет применен второй темплейт.

XSLT движок имеет встроенный темплей по умолчанию
что-то типа такого
Код

<xsl:template match="*|@*"><xsl:value-of select="."/></xsl:template>


Срабатывание этого темплейта приводит к выводу текста тэга (и его аттрибутов) без всякой разметки..
т.е.
Код

<a b="hi,">Jack!</a>

будет выведено как
Код

hi,Jack!


проверьте, может у вас похожий вывод.


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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