Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > XML, XSL > Как отменить в xsl:copy-of вставку переходов строк |
Автор: Rino 23.9.2008, 17:44 | ||
есть код
строчка 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, но не получилось. Подскажите, горит. |
Автор: Rino 24.9.2008, 10:50 |
пока нашел такой выход: <script>contentM[<xsl:value-of select="imagesOrder" />]='<xsl:value-of select="normalize-space(text)" />';</script> При этом главное оберунуть text в <![CDATA[какой то текст, с тегами, пробелами и переходами строк]]> но делаю это на уровне xml, не очень удобно. Может все таки кто-нить подскажет еще какой-нить вариант. |
Автор: jsa 24.9.2008, 12:03 |
<xsl:strip-space> не подходит? |
Автор: Bulat 24.9.2008, 12:47 |
Rino, вместо <xsl:copy-of select="."/>, попробуй <xsl:apply-templates select="."/>. Может поможет ![]() |
Автор: Rino 24.9.2008, 15:52 |
Bulat, <xsl:apply-templates select="text"/> используя с <![CDATA[какой то текст, с тегами, пробелами и переходами строк]]> переносит строки, без сдата - режит html теги. jsa, <xsl:strip-space> пробовал, но что не помогло. Задача была не только убрать переводы строк но и сохранить HTML. |
Автор: Bulat 24.9.2008, 17:05 |
Давай с самого начала, зачем ты в яваскрипт кидаешь html-текст?? Мне кажется, что все можно сделать проще ![]() |
Автор: Rino 24.9.2008, 17:22 |
Bulat, да это не я его туда кидаю. Человек не смог решить эту проблему, попросил помочь, я вроде бы нашел решение. Это для галерии делается, там меняется текст и картинка. посмотри вот здесь http://santehmaster.ru/service/repair/ |
Автор: Bulat 24.9.2008, 17:35 |
Rino, дело в том, что Данные задачи не решаются на уровне xslt. XSLT - это лишь шаблоны для разметки. Максимум, можно что-то скрыть/показать из того, что у нас выходе. ![]() ![]() |
Автор: Cycle 24.9.2008, 21:36 | ||||||
Rino, сформулируй пожалуйста, что именно тебе надо. Потому что сам по себе xsl:copy-of данные не переформатирует. Вот тестировал в msxsl: Исходный xml-файл
xsl-схема
результат
Как видешь, лишние переносы строк не появились. Может тебе лечше попробовать переделать свой код без скрипта? |
Автор: Bulat 25.9.2008, 10:28 |
Cycle, Скорее всего твой вариант отличается тем, что у тебя изначально в коде нет переноса строк(символов табуляции). XSLT - не может урезать символы табуляции, насколько мне известно. ![]() |
Автор: Rino 25.9.2008, 11:16 |
Ребят у меня в тексте, который вставляет copy-of не было никаких переносов, он был вытянут в строчку! после вставки, он появлялся в коду страницы в отформатированном виде. и все бы хорошо, но мне надо было запихнуть его в СТРОКУ, т.е. обрамить кавычками с двух сторон. соотвественно один переход строки и кавычки обрывались. яваскрипт ругался на незаконченную строку. вот. |
Автор: jsa 25.9.2008, 12:45 | ||
а можно сделать
и будет тебе счастье |
Автор: Bulat 25.9.2008, 12:46 |
Rino, раз уж есть js, можно работать с регулярными выражениями. берешь свой текст и проверяешь на /\n/. Если есть хоть один символ переноса строки, значит есть. Заодно, можно проверить где именно появляются переносы строк, если появляются ![]() |
Автор: Rino 25.9.2008, 14:47 |
Bulat, а смысл обрабатывать это скриптами? |
Автор: Bulat 25.9.2008, 15:00 |
Rino, Вообще-то хорошо было бы удостоверится, что переносы строк появляются именно на этапе обработки xslt. Лично я с этим не сталкивался, и не получилось у себя с имитировать. Если переносы строк, все же появляются действительно из-за форматирования xsl - будем знать, а если нет, то боюсь нужно искать корень проблемы, а не вешать просто заплатку ![]() |