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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с шаблоном XSL 
:(
    Опции темы
gashik
Дата 20.2.2011, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть xml-документ с такой структурой:

Код

<order>
    <order_list id=1>
        <order_items>
            <items_order id=1>
                <item id=155>
                    ...
                </item>
            </items_order>
            <items_order id=2>
                <items id=170>
                    ...
                </item>
            </items_order>
        </order_items>
    </order_list>
    <order_list id=125>
        <order_items>
            <items_order id=39>
                <item id=56>
                    ...
                </item>
            </items_order>
            <items_order id=40>
                <items id=65>
                    ...
                </item>
            </items_order>
        </order_items>
    </order_list>
    ... и т.д.
</order>


Уже сломал голову с этой задачей, суть которой в следующем: нужно сделать xsl шаблон, который выведет содержимое item, но не всех, а только 3 штук!!! 
PM MAIL   Вверх
diadiavova
Дата 20.2.2011, 20:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(gashik @  20.2.2011,  19:51 Найти цитируемый пост)
 нужно сделать xsl шаблон, который выведет содержимое item, но не всех, а только 3 штук!!!  

Во-первых, куда выведет? А во-вторых, каких именно трех штук: первых, произвольных, или может соответствующих, какому-либо условию? smile 

Кроме того, в дальнейшем, не сочти за труд давать своим темам более информативные названия.


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


Новичок



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

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



Цитата

Во-первых, куда выведет? А во-вторых, каких именно трех штук: первых, произвольных, или может соответствующих, какому-либо условию?

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

<xsl:template match="/order">
           <xsl:apply-template select="order_list id"/>
</xsl:template>

<xsl:template match="order_list id">
           <xsl:apply-template select="order_items"/>
</xsl:template>

<xsl:template match="order_items">
           <xsl:apply-template select="items_order"/>
</xsl:template>

<xsl:template match="items_order">
           <xsl:value-of select="item"/>
</xsl:template>

а вот логики для ограничения я придумать не могу.
З.Ы. В шаблоне может ошибся, но это я рисовал его для наглядности
PM MAIL   Вверх
diadiavova
Дата 20.2.2011, 22:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(gashik @  20.2.2011,  21:43 Найти цитируемый пост)
а вот логики для ограничения я придумать не могу.

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

<xsl:template match="item[count(preceding::item) &lt; 3]">
           <xsl:value-of select="."/>
</xsl:template>


И в твоем примере много лишнего smile 

Это сообщение отредактировал(а) diadiavova - 20.2.2011, 23:53


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


Новичок



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

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



Пока еще не получилось, где-то я туплю наверное или еще не доконца понял суть xsl. Буду мучить)

Цитата

А вообще, задача очень странная. 


Почему? Просто выводиться блок из трех позиций и внизу ссылка - просмотреть "все заказы", по-моему нормально. Или Вы можете предложить для решения такой задачи другое более оптимальное решение?
PM MAIL   Вверх
gashik
Дата 21.2.2011, 03:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Получилось!!! После долгих мучений и из шаблона убрал кучу лишакаsmile

Код

    <xsl:template match="/orders">
        
        <xsl:apply-templates select="..//..//..//item[count(preceding::item) &lt; 3]"/>
    </xsl:template>
    <xsl:template match="item">
        
        <p><xsl:value-of select="item_name"/></p>
    </xsl:template>


Правда сейчас заметил что-то странное в работе xsl
Код

    <xsl:value-of select="item_name"/>

и
Код

    <xsl:apply-templates select="item_name"/>

выдают один и тот же результат. Это нормально?

Да, и еще если не сложно вопрос: если бы все таки нужно было вывести 3 случайных элемента, как тогда реализовать?

Это сообщение отредактировал(а) gashik - 21.2.2011, 03:53
PM MAIL   Вверх
diadiavova
Дата 21.2.2011, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(gashik @  21.2.2011,  03:47 Найти цитируемый пост)
<xsl:apply-templates select="..//..//..//item[count(preceding::item) &lt; 3]"/>

 smile 
Код

 <xsl:apply-templates select="//item[count(preceding::item) &lt; 3]"/>

Цитата(gashik @  21.2.2011,  03:47 Найти цитируемый пост)
выдают один и тот же результат. Это нормально?

Зависит от того, что определено в соответствующем шаблоне. Если шаблон, соответствующий селекту отсутствует или там просто эпплай-темплейт, то нормально.
Цитата(gashik @  21.2.2011,  03:47 Найти цитируемый пост)
если бы все таки нужно было вывести 3 случайных элемента, как тогда реализовать?

Если не использовать никаких приблуд, а ограничиться стандартами, то видимо никак. Генератора псевдослучайных чисел в хсл нет.

Добавлено через 3 минуты и 1 секунду
Цитата(gashik @  21.2.2011,  02:50 Найти цитируемый пост)
Почему? Просто выводиться блок из трех позиций и внизу ссылка - просмотреть "все заказы", по-моему нормально. 

Просто странно, что все равно, что выводить.
Цитата(gashik @  21.2.2011,  02:50 Найти цитируемый пост)
Или Вы можете предложить для решения такой задачи другое более оптимальное решение?

Можно еще данные в базе хранить и обрабатывать программно smile 


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


Новичок



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

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



Цитата

Можно еще данные в базе хранить и обрабатывать программно  


Можно конечно и если честно, думал еще помучаюсь с xsl и если нет то так и сделаю, просто лезть в двиг не очень хотелось, да он еще и зазенден, да еще неохото было разбираться со структурой БД. А данные и так в базе храняться, но под лозунгом "Наша цмс круче, быстрей" разработчики ее впаривають за немалые деньги, но... быстроты я что то не вижу в связке DB-XML-XSL, мож чего-то не понимаю конечно? Может так быстрей чем просто вывод сделать с базы?
PM MAIL   Вверх
diadiavova
Дата 21.2.2011, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(gashik @  21.2.2011,  16:58 Найти цитируемый пост)
Может так быстрей чем просто вывод сделать с базы? 

Не думаю.  smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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