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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> замена строки в строке 
:(
    Опции темы
medin_84
Дата 14.11.2008, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



допустим xml
Код

<root>
 <el>text [123] text [255] text</el>
 ...
 <el>text[125] text text [129]</el>
</root>

нужно заменить следующим образом:
text <a href="#" onMouseOver="" onMouseOut="">[123]</a> text, и в блок <div style="display:none">значение из другого xml где атрибут ref=123</div>

Код

<root>
 <el ref='123'>text</el>
 ...
</root>


пробовал так сделать text <a href="#" onMouseOver="" onMouseOut="">[123]</a> text

<xsl:call-template name="popup">
 <xsl:with-param name="s"><xsl:copy-of select="el"/></xsl:with-param>
</xsl:call-template>

<xsl:template name="popup">
   <xsl:param name="s"/>
   <xsl:copy-of select="normalize-space(substring-before($s,']'))"/>
   <xsl:if test="contains($s,'[')">
      <a href=""><div>[
      <xsl:call-template name="popup">
         <xsl:with-param name="s" select="substring-after($s,'[')"/>
      </xsl:call-template>
      ]</div></a>
   </xsl:if>
</xsl:template>

получается следующее
text[123 
[ 123 ]

после квадратной закрывающей скобки урезается текст

помогите пжлст справиться с задачей?!

Это сообщение отредактировал(а) medin_84 - 14.11.2008, 12:40
PM MAIL   Вверх
sir_nuf_nuf
Дата 14.11.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



medin_84, сформулируйте вопрос по человечески.
1) что дано
2) что надо получить.

Цитата

нужно заменить следующим образом:
text <a href="#" onMouseOver="" onMouseOut="">[123]</a> text, и в блок <div style="display:none">значение из другого xml где атрибут ref=123</div>


это вообще как связано с приведенными данными ?


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


Новичок



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

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



мне нужно:
заменить между текстом элемента  <el>text [123] text [255] text</el> значения между кв.скобками [123] [n] на ссылку при наведении на которую будет отображаться блок со значением из другого xml

например
<el>text [123] text [255] text</el>

получить
text <a href="#" onMouseOver="show('ref_123')">[123]</a> text <a href="#" onMouseOver="show('ref_255')">[255]</a> text

есть xml от куда должны выдергиваться данные
Код

<root>
 <el ref='123'>text123</el>
 ...
 <el ref='255'>text255</el>
</root>


малость получается для одной строки с одними кв.скобами
с двумя и долее кв.скобами не получается, думаю надо итерацию мутить
правда еще не врубаюсь, сам уже запутался
шаблон не идеал знаю, так тестовая
есть не большие различия в названиях элементов здесь для примера писал root el

Код

<xsl:call-template name="popup">
    <xsl:with-param name="s"><xsl:copy-of select="title"/></xsl:with-param>
</xsl:call-template>

<xsl:template name="popup">
    <xsl:param name="s"/>
    <xsl:param name="s1" select="normalize-space(substring-before($s,'['))"/>
    <xsl:param name="s2" select="normalize-space(substring-after($s,']'))"/>

    <xsl:param name="rid">
        <xsl:value-of select="substring($s, string-length($s1) + 1, string-length($s) - (string-length($s1) + string-length($s2)))"/>
    </xsl:param>
    
    <xsl:call-template name="replace-string">
        <xsl:with-param name="text" select="$s"/>
        <xsl:with-param name="from" select="$rid"/>
        <xsl:with-param name="to"><sup><a href="?" onmouseover="ShowContent('ref_{$rid}'); return true;" onmouseout="HideContent('ref_{$rid}'); return true;"><xsl:value-of select="$rid"/></a></sup></xsl:with-param>
    </xsl:call-template>
    
    <xsl:call-template name="getREF">
        <xsl:with-param name="rid" select="substring($rid, 2, string-length($rid) - 2)"/>
    </xsl:call-template>

</xsl:template>

<!-- GET REFERENCE -->
<xsl:template name="getREF">
    <xsl:param name="rid"/>
    <div id="ref_[{$rid}]" class="ref" style="display:none;position:absolute;z-index:100">
        <xsl:value-of select="document('../../xml/reference.xml')/refs/ref[@rid=$rid]/text()"/>
    </div>
</xsl:template>
<!-- /GET REFERENCE -->

<xsl:template name="replace-string">
    <xsl:param name="text"/>
    <xsl:param name="from"/>
    <xsl:param name="to"/>

    <xsl:choose>
      <xsl:when test="contains($text, $from)">

        <xsl:variable name="before" select="substring-before($text, $from)"/>
        <xsl:variable name="after" select="substring-after($text, $from)"/>
        <xsl:variable name="prefix" select="concat($before, $to)"/>

        <xsl:copy-of select="$before"/>
        <xsl:copy-of select="$to"/>
            <xsl:call-template name="replace-string">
              <xsl:with-param name="text" select="$after"/>
              <xsl:with-param name="from" select="$from"/>
              <xsl:with-param name="to" select="$to"/>
            </xsl:call-template>
      </xsl:when>
      
      <xsl:otherwise>
        <xsl:value-of select="$text"/>
      </xsl:otherwise>
    </xsl:choose>
    
 </xsl:template>



Это сообщение отредактировал(а) medin_84 - 15.11.2008, 08:03
PM MAIL   Вверх
sir_nuf_nuf
Дата 15.11.2008, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



medin_84, сейчас попробую разобраться.. (тоже только начинаю с XSL).
Но что то мне кажется, что это очень сложный способ решения проблемы.

намного проще это решить с помощью регулярных выражений.


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


Новичок



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

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



регулярные выражения это хорошо было бы гораздо проще
но это version 2.0
а мне нужна реализация на 1.0

Это сообщение отредактировал(а) medin_84 - 17.11.2008, 12:08
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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