|
|
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
народ, переносил ли ктонибудь по словам строки... например в одном элементе должно быть не больше 50 символов, все остальное в следующий элемент и т.д. если там снова больше 50 символов... ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 14:36 |
|
||
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
Тоесть допустим есть текчтовый блок, его надо разбить на строки длиной не более 50 символов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 15:18 |
|
||
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
ну да... вроде этого: есть <Object>Соль йодированая - В каждой крупинке сила Великого Джедая!<Object/> и если например взять чтобы в строчке не больше 20 симвовлов было тогда результат преобразования по идее должен выглядить следующим образом: <Object>Соль йодированая - <Object/> <Object>В каждой крупинке<Object/> <Object>сила Великого<Object/> <Object>Джедая!<Object/> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 15:41 |
|
||
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
:D Убил !!! Жешшь Примерно так: <xsl:template match="//Object"> <xsl:choose> <xsl:when test="string-length(text()) < 20"> <xsl:element name="Object"> <xsl:value-of select="text()"/> </xsl:element> </xsl:when> <xsl:otherwise> <xsl:element name="Object"> а вот сдесь нужна функция которая либо будет вытаскивать кусками, либо затирать эти куски в основной строке по мере вытаскивания, посмотри функцию substring, вроде она ... </xsl:element> <xsl:text> </xsl:text> </xsl:otherwise> </xsl:choose> </xsl:template> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 15:51 |
|
||
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
substring-after substring-before (строка, символ) первая выдает строку после определеного символа, вторая до... ну вот если я сделаю substring-before(text(), ' ') то он выдаст "Соль" если substring-after(text(), ' ') то "йодированая - В каждой крупинке сила Великого Джедая!" можно конкатом сделать вот так: concat(substring-before(text(), ' '), substring-before(substring-after(text(), ' '), ' ')) тогда будет Соль йодированная, но опять я не знаю сколько символов здесь... не понятно по какому критерию эти слова переносить или оставлять, опять нужно подсчитывать символы и мне так кажется нужно это делать циклом, читай рекурсией... ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 16:48 |
|
||
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
да есть ещё substring(строка, начало позиции, кол-во символов) и если написать что-то вроде substring-before(text(),1,20) и продолжать так делить то получится Соль йодированая - В каждой крупинке сил а Великого Джедая! то есть он будет слова обрезать. самое главное, то как перенести по словам, а не по символам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 10:30 |
|
||
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
Хотелось бы ответить, но че то написать некак не получается, а времени мало, так что могу токо посоветовать 1. Если ты смог написать фигню которая разбивает строку , на др. строки длиной по 20 символов и задача стоит лишь втом чтобы не разбивать слова , то напиши проверку , к примеру берешь значения 20 символа и сравниваешь его с пробелом, если нет, то циклом находишь ближайший на выводимом промежутке. Описание функций возможных для обработки строк смотри в пространсве fn соответсвенно ссылка http://www.w3.org/2005/xpath-functions/ токо учти что не все парсеры(точнее те кто основаны на xsl версии 1.0) их не потдерживают. Напишешь покаж результат, Интересно чем дело закончится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 11:10 |
|
||
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
XSLT<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/root"> <root> <xsl:call-template name="format"> <xsl:with-param select="normalize-space(Object)" name="txt" /> <xsl:with-param name="width">20</xsl:with-param> </xsl:call-template> </root> </xsl:template> <xsl:template name="format"> <xsl:param name="txt" /> <xsl:param name="width" /> <xsl:if test="$txt"> <xsl:variable name="real-width"> <xsl:call-template name="tune-width"> <xsl:with-param select="$txt" name="txt" /> <xsl:with-param select="$width" name="width" /> <xsl:with-param select="$width" name="def" /> </xsl:call-template> </xsl:variable> <Object><xsl:value-of select="substring($txt, 1, $real-width)" /></Object> <xsl:call-template name="format"> <xsl:with-param select="substring($txt,$real-width+1)" name="txt" /> <xsl:with-param select="$width" name="width" /> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="tune-width"> <xsl:param name="txt" /> <xsl:param name="width" /> <xsl:param name="def" /> <xsl:choose> <xsl:when test="$width = 0"> <xsl:value-of select="$def" /> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="substring($txt, $width, 1 ) = ' '"> <xsl:value-of select="$width" /> </xsl:when> <xsl:otherwise> <xsl:call-template name="tune-width"> <xsl:with-param select="$txt" name="txt" /> <xsl:with-param select="$width - 1" name="width" /> <xsl:with-param select="$def" name="def" /> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> Input:<?xml version="1.0" encoding="UTF-16"?> <root> <Object>Соль йодированая - В каждой крупинке сила Великого Джедая!</Object> </root> Output:<?xml version="1.0" encoding="UTF-16"?> <root> <Object>Соль йодированая - </Object> <Object>В каждой крупинке </Object> <Object>сила Великого </Object> <Object>Джедая!</Object> </root> Кстати к разговору в соседней ветке о FAQ Это преобразование было написано не мной, а было найдено в одном из англоязычных FAQ и тут я конечно чувствую себя двойственно с одной стороны я решил проблему - быстро с другой- мало, что сделал для этого преобразования в плане опыта своего, потомучто все таки еслибы я написал его сам, то это было быгораздо эффективней для дальнейшей моей работы. и вот ещё ... к вопросу о филисофии XSLT: Небезисзвестный нам Алексей ВаликовQ: как ограничить длину всех строк в тексте "максимум 80 символов"? A: Ох, непросто. Не тем концом отвертки гвозди забиваете. Можно написать рекурсивный шаблон, которому передаются два параметра: текущая длина строки и остаток строки. Шаблон берет первый токен остатка строки, отделенный пробелами, складывает его длину с текущей длиной строки плюс один и сравнивает с 80. Если больше, то выводит , и вызывает сам себя с текущей длиной строки равной 0 и тем же остатком строки. Если меньше, то выводит пробел, затем первый токен остатка строки и вызывает себя с новой текущей длиной строки равной старой текущей длине строки плюс длина первого токена текущего остатка строки плюс единица и с новым остатком строки равным части старого текущего остатка после пробела после первого токена старого текущего остатка строки. Однако, как очевидно из вышесказанного, это есть извращение. Легче написать либо расширение, либо простенький фильтр. XSLT слабо подходит для форматирования текста. -- Aleksei Valikov в fido7.ru.xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 13:07 |
|
||
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
поэтому теперь думаю как бы его переделать чтобы он сработал для нескольких <object> типа <root> <Object>Это что за боровик шустро влез на броневик?</Object> <Object>Лежит на спине - никому не нужна. Прислони к стене - пригодится она.<Object> <Object>Кстати загадки из детского журанала мурзилка </Object> </root> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 13:49 |
|
||
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
гад, все время практически последнее слова перекидывает на следующую строчку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 15:28 |
|
||
|
Перенос по словам
|
|||
|---|---|---|---|
|
#18+
Если кто будет пользовать надо ещё в шаблон <xsl:template name="tune-width"> вставить такое условие на томже уровне что и проврека $width с нулем, чтобы если в строке ДВА слова последних остались он их не дробил на две категории <xsl:when test="string-length($txt) < $width"> <xsl:value-of select="$def" /> </xsl:when> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 17:07 |
|
||
|
|

start [/forum/topic.php?fid=14&msg=34343009&tid=1334441]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 472ms |

| 0 / 0 |
