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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отменить в xsl:copy-of вставку переходов строк 
:(
    Опции темы
Rino
Дата 23.9.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



есть код
Код

<xsl:for-each select="images/image" >
                <xsl:if test="(position() mod 2 = 1)">
                    <div class="contentGallery">
                            <img src="/images/line.jpg" class="picLine"/>
                            <a href="javascript:void(0);" OnClick="javascript:ChangeContent('{imagesPath}', {imagesOrder})" ><img src="/images/small/{imagesPath}" class="feedBack" /></a>
                            <script>contentM[<xsl:value-of select="imagesOrder" />]='<xsl:copy-of select="text" />';
                            </script>                                
                            <div class="titleText">
                                <xsl:copy-of select="imagesTitleRu" />
                                
                            </div>
                    </div>
</xsl:if>

строчка contentM[<xsl:value-of select="imagesOrder" />]='<xsl:copy-of select="text" />' кладет html текст в переменную яваскрипта.
возникает проблема с переносом строк. (xsl форматирует код и вставляет переносы).
например таблица выводится вот в таком виде
contentM[1]='<text><table><tbody>
<tr>
<td>Демонтаж старой электропроводки</td>
<td>35 руб.</td>
<td>шт</td>
</tr>
<tr>
<td>монтаж и подключение автомата</td>
<td>400 руб.</td>
<td>шт</td>
</tr>
<tr>
<td>Монтаж и подключение входного звонка</td>
<td>500 руб.</td>
<td>шт</td>
</tr>
<tr>
<td>Монтаж и подключение кассетного светильника и бра</td>
<td>500 руб.</td>
<td>шт</td>
</tr>
<tr>
<td>Монтаж и подключение люстры</td>
<td>700 руб.</td>
<td>шт</td>
</tr>
<tr>
<td>Монтаж и подключение электроточки</td>
<td>300 руб.</td>
<td>шт</td>
</tr>
<tr>
<td>Монтаж кабель-каналов</td>
<td>90 руб.</td>
<td>м2</td>
</tr>
<tr>
<td>Монтаж канального вентилятора</td>
<td>500 руб.</td>
<td>шт</td>
</tr>
</tbody></table></text>';

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

Вопрос - как заставить xsl не вставлять перенос строк? Пробовал использовать CDATA, но не получилось.
Подскажите, горит.
PM MAIL   Вверх
jsa
Дата 24.9.2008, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Rino @  23.9.2008,  22:44 Найти цитируемый пост)
<script>contentM[<xsl:value-of select="imagesOrder" />]='<xsl:copy-of select="text" />';

Код

<xsl:text>
<script>contentM[<xsl:value-of select="imagesOrder" />]='<xsl:copy-of select="text" />';
</xsl:text>

попробуй
или даже так
Код

script>contentM[<xsl:value-of select="imagesOrder" />]='<xsl:text><xsl:copy-of select="text" /></xsl:text>';


Добавлено @ 06:36
можно еще посмотреть в сторону <xsl:strip-space>

Это сообщение отредактировал(а) jsa - 24.9.2008, 06:40


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
Rino
Дата 24.9.2008, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



пока нашел такой выход:
<script>contentM[<xsl:value-of select="imagesOrder" />]='<xsl:value-of select="normalize-space(text)" />';</script>

При этом главное оберунуть text в <![CDATA[какой то текст, с тегами, пробелами и переходами строк]]> но делаю это на уровне xml,
не очень удобно. 
Может все таки кто-нить подскажет еще какой-нить вариант.
PM MAIL   Вверх
jsa
Дата 24.9.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



<xsl:strip-space> не подходит?


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
Bulat
Дата 24.9.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Rino, вместо <xsl:copy-of select="."/>, попробуй <xsl:apply-templates select="."/>. Может поможет smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Rino
Дата 24.9.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Bulat, <xsl:apply-templates select="text"/> используя с <![CDATA[какой то текст, с тегами, пробелами и переходами строк]]> переносит строки, без сдата - режит html теги.

jsa,  <xsl:strip-space>  пробовал, но что не помогло.

Задача была не только убрать переводы строк но и сохранить HTML.
PM MAIL   Вверх
Bulat
Дата 24.9.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Давай с самого начала, зачем ты в яваскрипт кидаешь html-текст?? Мне кажется, что все можно сделать проще smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Rino
Дата 24.9.2008, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Bulat, да это не я его туда кидаю. Человек не смог решить эту проблему, попросил помочь, я вроде бы нашел решение.
Это для галерии делается, там меняется текст и картинка.
посмотри вот здесь http://santehmaster.ru/service/repair/
PM MAIL   Вверх
Bulat
Дата 24.9.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Rino, дело в том, что 

Цитата(Rino @  24.9.2008,  15:52 Найти цитируемый пост)
Задача была не только убрать переводы строк


Данные задачи не решаются на уровне xslt. XSLT - это лишь шаблоны для разметки. Максимум, можно что-то скрыть/показать из того, что у нас выходе. smile Возможно, конечно, если покопатся, то в js это можно сделать, но в нем я не так силен smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Cycle
  Дата 24.9.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Rino, сформулируй пожалуйста, что именно тебе надо. Потому что сам по себе xsl:copy-of данные не переформатирует.
Вот тестировал в msxsl:

Исходный xml-файл
Код

<?xml version='1.0'?>
<text>
    <table>
        <tr><td>11</td><td>12</td></tr>
        <tr><td>21</td><td>22</td></tr>
    </table>
</text>


xsl-схема
Код

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:copy-of select="text"/>
    </xsl:template>
</xsl:stylesheet>


результат
Код

<?xml version="1.0" encoding="UTF-16"?><text>
    <table>
        <tr><td>11</td><td>12</td></tr>
        <tr><td>21</td><td>22</td></tr>
    </table>
</text>


Как видешь, лишние переносы строк не появились. Может тебе лечше попробовать переделать свой код без скрипта?
PM MAIL   Вверх
Bulat
Дата 25.9.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Cycle, Скорее всего твой вариант отличается тем, что у тебя изначально в коде нет переноса строк(символов табуляции). XSLT - не может урезать символы табуляции, насколько мне известно. smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Rino
Дата 25.9.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребят у меня в тексте, который вставляет copy-of не было никаких переносов, он был вытянут в строчку!
после вставки, он появлялся в коду страницы в отформатированном виде.
и все бы хорошо, но мне надо было запихнуть его в СТРОКУ, т.е. обрамить кавычками с двух сторон.
соотвественно один переход строки и кавычки обрывались. яваскрипт ругался на незаконченную строку.

вот.
PM MAIL   Вверх
jsa
Дата 25.9.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а можно сделать 
Код

<xsl:output indent="no" />

и будет тебе счастье


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
Bulat
Дата 25.9.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Rino, раз уж есть js, можно работать с регулярными выражениями. берешь свой текст и проверяешь на /\n/. Если есть хоть один символ переноса строки, значит есть. Заодно, можно проверить где именно появляются переносы строк, если появляются smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Rino
Дата 25.9.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Bulat, а смысл обрабатывать это скриптами? 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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