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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разбить переменную на 2 строчи =) 
:(
    Опции темы
CodeGold
Дата 6.3.2012, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здвраствуйте, помогите доброму человеку. Ничего не понимаю в xsl

вот есть строка как я понил выводит данные:

Код

<xsl:value-of disable-output-escaping="yes" select="item_text"/>



как я понял item_text это переменная. Вот с ней мне нужно чуток поработать.

- определить позицию "<hr>"
- переменой text1 присвоить все символы с 0 до позиции "<hr>"
- переменной text2 присвоить все символы с позиции "<hr>" до конца строки

и вывести по шаблону 


item_text  = "

<span onclick="question_show(this)">text1<span style="display: none"> text2</span></span>

";


на делфи я бы написал так:


Код

    p1 := pos('<hr>', item_text);

    item_text_1 := copy(item_text, 1, p1);
    item_text_2 := copy(item_text, p1, lenght(item_text)-p1);

item_text := '<span onclick="question_show(this)">' + item_text_1 + '<span style="display: none">'+ item_text_2 + '</span></span>';




на php вот так :

Код

$p1 = strpos($item_text, '<hr>');
$item_text_1 = substr($item_text, 0, $p1);
$item_text_2 = substr($item_text, $p1, strlen($item_text)-$p1);
$item_text = "<span onclick=\"question_show(this)\">  $item_text_1 <span style=\"display: none\"> $item_text_2 </span>";



а как на это XSL  smile 




вот весь шаблон

Код

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
    
    <xsl:template match="/document">
        
        <!-- СписокЗаписейГостевойКниги  -->
        
        <h1>
            <xsl:value-of disable-output-escaping="yes" select="blocks/name"/>
        </h1>
        
        <xsl:value-of disable-output-escaping="yes" select="blocks/description"/>
        
        <!-- Выводим сообщение -->
        <xsl:if test="message/node()">
            <div id="message">
                <xsl:value-of disable-output-escaping="yes" select="message"/>
            </div>
        </xsl:if>
        
        <!-- Выводим ошибку (error), если она была передана через внешний параметр -->
        <xsl:if test="error/node()">
            <div id="error">
                <xsl:value-of select="error"/>
            </div>
        </xsl:if>
        
        <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
        <xsl:variable name="parent_group_id" select="blocks/parent_group_id"/>
        
        <!-- Отображение подгрупп данной группы -->
        <ul>
            <xsl:apply-templates select=".//group[@parent_id=$parent_group_id]" mode="goups"/>
        </ul>
        
        <div id="ShowAddComment">
            <a class="dashed" href="javascript:void(0)" onclick="javascript:cr('AddRecord')">Задать вопрос</a>
        </div>
        
        <div id="AddRecord" style="display: none">
            <div class="comment">
                
                <!--Отображение формы добавления комментария-->
                <form action="./" method="post">
                    
                    <xsl:if test="/document/site_user_id = 0">
                        
                        <!--Ваше имя: <br/><input type="text" name="autor" size="50" value="{/document/autor}"/><br/>-->
                        Ваше имя: <br/><input type="text" name="subject" size="50" value="{/document/subject}"/><br/>
                        Электронная почта: <br/><input type="text" name="email" size="50" value="{/document/email}"/><br/>
                        
                    </xsl:if>
                    
                    
                    Текст вопроса:<br/>
                    
                    <textarea type="text" name="text_item" cols="38" rows="10">
                        <xsl:value-of select="/document/text_item"/>
                    </textarea><br/>
                    
                    
                    <!-- Обработка CAPTCHA -->
                    <xsl:if test="/document/captcha_key != 0 and /document/site_user_id = 0">
                        
                        Введите цифры с картинки
                        
                        <div >
                            <span style="float:left; padding: 7px 10px 0 0"><img class="image" src="/captcha.php?get_captcha={/document/captcha_key}&amp;height=30&amp;width=100" title="Код подтверждения" name="captcha"/></span>
                            
                            <div style="float:left">
                                <input type="hidden" name="captcha_key" value="{/document/captcha_key}"/>
                                <input type="text" name="captcha_keystring" size="15"/>
                            </div>
                        </div>
                        
                        <div id="captcha" style="clear:both; margin: 0 0 10px 0">
                            <a class="dashed" href="javascript:void(0);" onclick="ReNewCaptcha({/document/captcha_key}, 30);return false;">Показать другое число</a>
                        </div>
                        
                        
                    </xsl:if>
                    
                    <input type="submit" class="button" name="submit_question" value="Задать вопрос"/>
                    <br/><br/>
                </form>
            </div>
        </div>
        
        <!-- Отображение записи информационной системы -->
        
        <xsl:apply-templates select="blocks/items/item[item_status=1]"/>
        
        
        <p>
            <!-- Строка ссылок на другие страницы информационной системы -->
            <xsl:if test="ОтображатьСсылкиНаСледующиеСтраницы=1">
                <xsl:if test="blocks/items/count_items &gt; blocks/items/items_on_page">
                    <p>
                        <xsl:call-template name="for">
                            <xsl:with-param name="n" select="blocks/items/count_items div blocks/items/items_on_page"/>
                            <xsl:with-param name="current_page" select="blocks/items/current_page"/>
                        </xsl:call-template>
                        <div style="clear: both"></div>
                    </p>
                </xsl:if>
            </xsl:if>
        </p>
    </xsl:template>
    
    <xsl:template match="blocks/items/item">
        
        <div class="comment">
            
            <xsl:if test="item_name != ''">
                <h4><xsl:value-of select="item_name"/></h4>
            </xsl:if>
            

            <xsl:value-of disable-output-escaping="yes" select="item_text"/>


<!--</div>    <div>-->
            
            <!-- Если сообщение от авторизованного пользователя -->
            <xsl:choose>
                <xsl:when test="site_user">
                    <a href="/users/info/{site_user/site_user_login}/"><xsl:value-of select="site_user/site_user_login"/></a>
                </xsl:when>
                <xsl:otherwise>
                    
                    <xsl:choose>
                        <xsl:when test="item_propertys/item_property[@xml_name='email']/value != ''">
                            <a href="mailto:{item_propertys/item_property[@xml_name='email']/value}"><xsl:value-of select="item_propertys/item_property[@xml_name='autor']/value"/></a>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:value-of select="item_propertys/item_property[@xml_name='autor']/value"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:otherwise>
            </xsl:choose>
            <!--&#xA0;·&#xA0;--><div class="date"><xsl:value-of select="item_date"/></div>
        </div>
        
        <!-- Отображение комментариев  -->
        <xsl:if test="count(item_comments/comment) &gt; 0">
            <div style="margin-left: 50px">
                <xsl:apply-templates select="item_comments/comment"/>
            </div>
        </xsl:if>
        
    </xsl:template>
    
    <!-- Отображение комментариев -->
    <xsl:template match="comment">
        
        <!-- Отображаем комментарий, если задан текст или тема комментария -->
        <xsl:if test="comment_text != '' or comment_subject != ''">
            <a name="comment{comment_id}"></a>
            <div class="comment" id="comment{comment_id}">
                
                <xsl:if test="comment_subject != ''">
                    <div>
                        <strong>
                            <xsl:value-of select="comment_subject"/>
                        </strong>
                    </div>
                </xsl:if>
                
                <xsl:value-of select="comment_text" disable-output-escaping="yes"/>
                
                <!-- Оценка комментария -->
                <xsl:if test="comment_grade != 0">
                    <div>Оценка:
                        <xsl:call-template name="show_average_grade">
                            <xsl:with-param name="grade" select="comment_grade"/>
                            <xsl:with-param name="const_grade" select="5"/>
                        </xsl:call-template>
                    </div>
                </xsl:if>
            </div>
            
            <div class="comment_desc">
                <xsl:choose>
                    <!-- Комментарий добавил авторизированный пользователь -->
                    <xsl:when test="site_user_login/node()">
                        <a href="/users/info/{site_user_login}/" class="c_u_l">
                            <xsl:value-of select="site_user_login"/>
                        </a>
                    </xsl:when>
                    <!-- Комментарй добавил неавторизированный пользователь -->
                    <xsl:otherwise>
                        <xsl:value-of select="comment_fio"/></xsl:otherwise>
                </xsl:choose>&#xA0;·&#xA0;<xsl:value-of select="comment_datetime"/>&#xA0;·&#xA0;<xsl:if
                    test="/document/show_add_comments/node()
                    and ((/document/show_add_comments = 1 and /document/site_user_id > 0)
        or /document/show_add_comments = 2)"><a href="javascript:cr('cr_{comment_id}');">ответить</a>&#xA0;·&#xA0;</xsl:if><a href="{/document/item/item_path}#comment{comment_id}" title="ссылка">#</a>
                
            </div>
            
            <!-- Отображаем только авторизированным пользователям -->
            <xsl:if test="/document/show_add_comments/node() and ((/document/show_add_comments = 1 and /document/site_user_id > 0) or /document/show_add_comments = 2)">
                <div class="cr" id="cr_{comment_id}">
                    
                    <xsl:call-template name="AddCommentForm">
                        <xsl:with-param name="comment_id" select="comment_id"/>
                    </xsl:call-template>
                </div>
            </xsl:if>
            
            <!-- Выбираем дочерние комментарии -->
            <xsl:if test="count(comment) > 0">
                <div class="csd">
                    <xsl:apply-templates select="comment"/>
                </div>
            </xsl:if>
        </xsl:if>
    </xsl:template>
    
    <!-- ======================================================== -->
    <!-- Шаблон выводит ссылки подгурппы инф. элемента -->
    <!-- ======================================================== -->
    
    <xsl:template match="group" mode="goups">
        <xsl:variable name="parent_id" select="@parent_id"/>
        
        <li>
            <xsl:if test="small_image!=''">
                <a href="{/document/blocks/url}{fullpath}" target="_blank">
                    <img src="{small_image}"/>
            </a>&#xA0;</xsl:if>
            <a href="{/document/blocks/url}{fullpath}">
                <b>
                    <xsl:value-of disable-output-escaping="yes" select="name"/>
                </b>
            </a>
        </li>
    </xsl:template>
    
    <!-- Вывод рейтинга -->
    <xsl:template name="show_average_grade">
        <xsl:param name="grade" select="0"/>
        <xsl:param name="const_grade" select="0"/>
        
        <!-- Чтобы избежать зацикливания -->
        <xsl:variable name="current_grade" select="$grade * 1"/>
        
        <xsl:choose>
            <!-- Если число целое -->
            <xsl:when test="floor($current_grade) = $current_grade and not($const_grade &gt; ceiling($current_grade))">
                
                <xsl:if test="$current_grade - 1 &gt; 0">
                    <xsl:call-template name="show_average_grade">
                        <xsl:with-param name="grade" select="$current_grade - 1"/>
                        <xsl:with-param name="const_grade" select="$const_grade - 1"/>
                    </xsl:call-template>
                </xsl:if>
                
                <xsl:if test="$current_grade != 0">
                    <img src="/hostcmsfiles/images/stars_single.gif"/>
                </xsl:if>
            </xsl:when>
            <xsl:when test="$current_grade != 0 and not($const_grade &gt; ceiling($current_grade))">
                
                <xsl:if test="$current_grade - 0.5 &gt; 0">
                    <xsl:call-template name="show_average_grade">
                        
                        <xsl:with-param name="grade" select="$current_grade - 0.5"/>
                        <xsl:with-param name="const_grade" select="$const_grade - 1"/>
                    </xsl:call-template>
                </xsl:if>
                
                <img src="/hostcmsfiles/images/stars_half.gif"/>
            </xsl:when>
            
            <!-- Выводим серые звездочки, пока текущая позиция не дойдет то значения, увеличенного до целого -->
            <xsl:otherwise>
                <xsl:call-template name="show_average_grade">
                    <xsl:with-param name="grade" select="$current_grade"/>
                    <xsl:with-param name="const_grade" select="$const_grade - 1"/>
                </xsl:call-template>
                <img src="/hostcmsfiles/images/stars_gray.gif"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    
    <!-- Цикл для вывода строк ссылок -->
    <xsl:template name="for">
        <xsl:param name="i" select="0"/>
        <xsl:param name="n"/>
        <xsl:param name="current_page"/>
        
        <xsl:if test="$n &gt; $i">
            <!-- Ставим ссылку на страницу-->
            <xsl:if test="$i != $current_page">
                
                <!-- Заносим в переменную $parent_group_id идентификатор текущей группы -->
                <xsl:variable name="parent_group_id" select="/document/blocks/parent_group_id"/>
                
                <!-- Определяем группу для формирования адреса ссылки -->
                <xsl:variable name="group_link">
                    <xsl:choose>
                        <!-- Если группа не корневая (!=0) -->
                        <xsl:when test="$parent_group_id != 0">
                            <xsl:value-of select="/document/blocks//group[@id=$parent_group_id]/fullpath"/>
                        </xsl:when>
                        <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
                        <xsl:otherwise></xsl:otherwise>
                    </xsl:choose>
                </xsl:variable>
                
                <!-- Определяем адрес ссылки -->
                <xsl:variable name="number_link">
                    <xsl:choose>
                        <!-- Если не нулевой уровень -->
                        <xsl:when test="$i != 0">page-<xsl:value-of select="$i+1"/>/</xsl:when>
                        <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
                        <xsl:otherwise></xsl:otherwise>
                    </xsl:choose>
                </xsl:variable>
                
                <a href="{/document/blocks/url}{$group_link}{$number_link}" class="page_link">
                    <xsl:value-of select="$i+1"/>
                </a>
            </xsl:if>
            
            <!-- Не ставим ссылку на страницу-->
            <xsl:if test="$i = $current_page">
                <span class="current">
                    <xsl:value-of select="$i + 1"/>
                </span>
            </xsl:if>
            
            <!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
            <xsl:call-template name="for">
                <xsl:with-param name="i" select="$i + 1"/>
                <xsl:with-param name="n" select="$n"/>
                <xsl:with-param name="current_page" select="$current_page"/>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
    
</xsl:stylesheet>




Это сообщение отредактировал(а) CodeGold - 6.3.2012, 17:20
PM MAIL   Вверх
diadiavova
Дата 6.3.2012, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(CodeGold @  6.3.2012,  16:40 Найти цитируемый пост)
как я понял item_text это переменная

Ты неправильно понял. Это выражение XPath
Цитата(CodeGold @  6.3.2012,  16:40 Найти цитируемый пост)
Вот с ней мне нужно чуток поработать.

- определить позицию "<hr>"
- переменой text1 присвоить все символы с 0 до позиции "<hr>"
- переменной text2 присвоить все символы с позиции "<hr>" до конца строки

и вывести по шаблону 

Насколько я понял, ты пытаешься работать с исходным документом как со строкой, а это в корне неправильно. если у тебя в документе строка
Код

text1<hr/>text2
то здесь мы имеем три узла документа и содержимое каждого можно описать выражением XPath, но для того, чтобы можно было показать, как это сделать ты забыл одну маленькую деталь, а именно - исходный документ. 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
CodeGold
Дата 7.3.2012, 04:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

то здесь мы имеем три узла документа и содержимое каждого можно описать выражением XPath, но для того, чтобы можно было показать, как это сделать ты забыл одну маленькую деталь, а именно - исходный документ. 



я вроде указал шаблон в конце поста или этого мало?

сделал так 

Код

    <span onclick="question_show(this)" class="question_show">
                <b>Вопрос:</b>
                
                <a> <xsl:value-of disable-output-escaping="yes" select='substring-before(item_text,"{gap}")' /></a>
                
                <xsl:if test="item_name != ''">
                    
                    <h4 align="right"><xsl:value-of select="item_name"/></h4>
                    
                </xsl:if>
                
                
                <div style="display: none">
                    
                    <b>Ответ:</b>
                    <xsl:value-of disable-output-escaping="yes" select='substring-after(item_text,"{gap}")' />
                    
                </div>
                
            </span>

PM MAIL   Вверх
diadiavova
Дата 7.3.2012, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(CodeGold @  7.3.2012,  05:38 Найти цитируемый пост)
я вроде указал шаблон в конце поста или этого мало?

Я написал не о шаблоне, а об исходном документе из которого этот самый шаблон извлекает данные.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
CodeGold
Дата 7.3.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Цитата

Я написал не о шаблоне, а об исходном документе из которого этот самый шаблон извлекает данные.


ААА, ЭТО СИСТЕМА УПРАВЛЕНИЯ CMSHOST, ТАМ ВСЁ ЗАМУДРЕННО. 

Это сообщение отредактировал(а) CodeGold - 7.3.2012, 14:28
PM MAIL   Вверх
diadiavova
Дата 7.3.2012, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(CodeGold @  7.3.2012,  15:27 Найти цитируемый пост)
ААА, ЭТО СИСТЕМА УПРАВЛЕНИЯ CMSHOST, ТАМ ВСЁ ЗАМУДРЕННО. 

Ну не обязательно весь документ, хватило бы фрагмента. Просто если я сейчас начну сам домысливать, то скорей всего покажу совсем не то, что надо. Ну вот что я имел в виду, допустим есть такой фрагмент исходного документа:
Код

<parent-element>text1<hr/>text2</parent-element>

Здесь для получения tex1 тебе надо будет использовать выражение
//parent-element/text()[1]
а для получения text2 -
//parent-element/text()[2]

Никакая обработка строки text1<hr/>text2 здесь не нужна.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
magelan
Дата 14.3.2012, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


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

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



ДядяВов, 

я боюсь там из-за того что:
<xsl:value-of disable-output-escaping="yes" select="item_text"/>

item_text выглядит как-то так:
Код

<item_text>text1&lt;hr/&gt;text2</item_text>


и скорее всего CodeGold ищет xPath функции:
Код

<xsl:value-of select="substring-before( item_text/text(), '&lt;hr/&gt;' )"/>
<xsl:value-of select="substring-after( item_text/text(), '&lt;hr/&gt;' )"/>


Это сообщение отредактировал(а) magelan - 14.3.2012, 13:59
PM MAIL   Вверх
CodeGold
Дата 14.3.2012, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



magelan, да эти функции искал.

disable-output-escaping="yes" я думаю что он у меня не находит '<hr/>'

пришлось заменить на  {gap}

я вот так сделал, просто по синтаксису не знал как сделать...

Код

<xsl:value-of disable-output-escaping="yes" select='substring-after(item_text,"{gap}")' />
<xsl:value-of disable-output-escaping="yes" select='substring-before(item_text,"{gap}")' />


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

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

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

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

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


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

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


 




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


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

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