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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> copy-of элемента с переменной внутри, интерполяция переменной в копируемом узле 
:(
    Опции темы
KSURi
Дата 29.7.2010, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Внутри XSL документа вставлены данные:
Код

<self:data>
  <item>
    <a href="{$htdocs}/foo">foo</a>
  </item>
  <item>
    <a href="{$htdocs}/bar">bar</a>
  </item>
</self:data>


Потом эти данные надо вывести в темплейте:
Код

<xsl:for-each select="document('')/xsl:stylesheet/self:data/item">
  <xsl:copy-of select="a"/>
</xsl:for-each>


Проблема в том, что переменная $htdocs не интерполируется, а так и вставляется в ссылку плейн-текстом. Мне, естественно, это не подходит. Как добиться нужного эффекта?


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
magelan
Дата 5.8.2010, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


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

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



По хорошему, по XML надо сначала пробежаться приблудой, которая заменит все эти {} на то, что надо.

На XSL это делается как-то так, хотя не очень понятно, откуда XSL узнает про $htdocs.

Код

<xsl:for-each select="document('')/xsl:stylesheet/self:data/item">
  <xsl:apply-templates select="a"/>
</xsl:for-each>

<xsl:template match="A|a">
   <xsl:copy>
       <xsl:copy-of select="@*[name() != 'href' and name() != 'HREF' ]"/>
       <xsl:attribute name="href">
           <xsl:choose>
                <xsl:when test="contains(@href, '{')">
                      <xsl:value-of select="substring-before(@href, '{' )" />
                      <xsl:call-template name="lexer">
                           <xsl:with-param name="lexem" select="substring-before(substring-after(@href, '{' ), '}' )" />
                      </xsl:call-template>
                      <xsl:value-of select="substring-after(@href, '}' )" />
                <xsl:when>
                <xsl:otherwise>
                      <xsl:value-of select="@href"/>
                <xsl:otherwise>
           </xsl:choose>
       </xsl:atribute>
       <xsl:value-of select="." />
   </xsl:copy>
</xsl:template>

<xsl:template name="lexer">
   <xsl:param name="lexem" />

   <xsl:if test="$lexem = '$htdocs'">
        <xsl:value-of select="'что-то'" />
   </xsl:if>
</xsl:template>

PM MAIL   Вверх
KSURi
Дата 9.8.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да нет же, $htdocs - это нормальная XSL переменная: 
Код

<xsl:variable name="htdocs" select="/some/path"/>

А 
Код

<a href="{$htdocs}">

это, соответственно, обычный способ подстановки переменных, который почему-то не работает внутри copy-of.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
magelan
Дата 9.8.2010, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


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

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



если проблема только с копи-оф, воспользуйтесь полной нотацией:

Код

<A>
  <xsl:attribute name="HREF">
     <xsl:value-of select="$htdocs"/>
  </xsl:attribute>
</A>


но мне почему-то кажется, что вы пишите XSL инструкцию в XML файле (не завернутую в xsl:stylesheet) и удивляетесь, почему она не работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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