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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тэмплэйт для XML tree, :exclamation 
V
    Опции темы
jsse
Дата 25.6.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Поскажите как должен выглядеть темплэйт для следующей структуры XML:

Код


<categories>
    <category name="AAA">
        <category name="BBB">
            <product name="product0" />
        </category>
        <category name="CCC">
            <product name="product1" />
            <product name="product2" />
        </category>
        <product name="product3" />
    </category>
</categories>



на выходе хочу получить:

Код


<select>
    <option>AAA</option>
    <option selected>--BBB</option>
    <option>--CCC</option>     
</select>
product0
<hr />    

<select>
    <option>AAA</option>
    <option>--BBB</option>
    <option selected>--CCC</option>     
</select>
product1
<hr />    

<select>
    <option>AAA</option>
    <option>--BBB</option>
    <option selected>--CCC</option>     
</select>
product2
<hr />    

<select>
    <option selected>AAA</option>
    <option>--BBB</option>
    <option>--CCC</option>     
</select>
product3
<hr />    
 
PM WWW Skype   Вверх
Beard
Дата 25.6.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Не совсем понятна зависимость - можно поподробней!?
А то первое, что в голову лезет:
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
<select>
    <option>AAA</option>
    <option selected>--BBB</option>
    <option>--CCC</option>     
</select>
product0
<hr />    
<select>
    <option>AAA</option>
    <option>--BBB</option>
    <option selected>--CCC</option>     
</select>
product1
<hr />    
<select>
    <option>AAA</option>
    <option>--BBB</option>
    <option selected>--CCC</option>     
</select>
product2
<hr />    
<select>
    <option selected>AAA</option>
    <option>--BBB</option>
    <option>--CCC</option>     
</select>
product3
<hr />    
    </xsl:template>
</xsl:stylesheet>

smile 
PM MAIL   Вверх
jsse
Дата 25.6.2006, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



категория может иметь подкатегорию. продукты находяться в категории.
все категории необходимо засунуть в select-ы, к подкатегориям ставить префикс "--"

Код

<select>
    <option>CATEGORY1</option>
    <option>CATEGORY2</option>
    <option>--SUBCATEGORY1</option>
    <option>--SUBCATEGORY2</option>
    <option>--SUBCATEGORY...[N]</option>
    <option>CATEGORY...[N]</option>
</select>


productN


и всё это повторять product[N] n-раз, т.е. сколько продуктов столько select-oв.

Добавлено @ 22:35 
Еще выделять <option selected> - ту категорию, в которой находиться product 
PM WWW Skype   Вверх
Beard
Дата 26.6.2006, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну если я правильно понял, то как-то так:
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <xsl:apply-templates select="//product" />
   </xsl:template>

   <xsl:template match="product">
      <xsl:variable name="parent" select=".." />

      <select>
         <xsl:for-each select="/categories/category">
            <option>
               <xsl:if test=".=$parent">
                  <xsl:attribute name="selected" />
               </xsl:if>

               <xsl:value-of select="@name" />
            </option>

            <xsl:for-each select=".//category">
               <option>
                   <xsl:if test=".=$parent">
                      <xsl:attribute name="selected" />
                   </xsl:if>
    
                   --<xsl:value-of select="@name" />
               </option>
            </xsl:for-each>
         </xsl:for-each>
      </select>

      <xsl:value-of select="@name" />

      <hr />
   </xsl:template>

</xsl:stylesheet>

Еще можно пооптимизировать  (если это конечно то, что надо) smile 
PM MAIL   Вверх
jsse
Дата 26.6.2006, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



То что надо! Благодарю.

ЗЫ. Пора и мне научиться думать деревьями smile 
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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