На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: Pr0[)!9Y, ANDLL
  
> XSLT Преобразование
    Приветствую!
    Имеется XML
    ExpandedWrap disabled
      <shop id="1">
          <shop_group id="1">
              <parent_id>0</parent_id>
              <shop_group id="11">
                  <parent_id>1</parent_id>
              </shop_group>
              <shop_group id="12">
                  <parent_id>1</parent_id>
              </shop_group>
              <shop_group id="13">
                  <parent_id>1</parent_id>
              </shop_group>
          </shop_group>
          <shop_group id="2">
              <shop_id>1</shop_id>
              <parent_id>0</parent_id>
              <shop_group id="21">
                  <parent_id>2</parent_id>
              </shop_group>
              <shop_group id="22">
                  <shop_id>1</shop_id>
                  <parent_id>2</parent_id>
              </shop_group>
              <shop_group id="23">
                  <shop_id>1</shop_id>
                  <parent_id>2</parent_id>
              </shop_group>
          </shop_group>
          <shop_group id="3">
              <shop_id>1</shop_id>
              <parent_id>0</parent_id>
              <shop_group id="31">
                  <shop_id>1</shop_id>
                  <parent_id>3</parent_id>
              </shop_group>
              <shop_group id="32">
                  <shop_id>1</shop_id>
                  <parent_id>3</parent_id>
              </shop_group>
              <shop_group id="33">
                  <shop_id>1</shop_id>
                  <parent_id>3</parent_id>
              </shop_group>
          </shop_group>  
      </shop>


    И XSL шаблон
    ExpandedWrap disabled
      <?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="/">
            <xsl:apply-templates select="/shop"/>
         </xsl:template>
        
         <xsl:variable name="n" select="number(3)"/>
        
         <!-- Шаблон для магазина -->
         <xsl:template match="/shop">
            <div class="group_list_m">
                  <xsl:apply-templates select="shop_group[position() mod $n = 1]"/>
                  <div class="clear"></div>
            </div>
         </xsl:template>
        
         <!-- Шаблон для групп товара -->
         <xsl:template match="shop_group">
            <div class="sub-main">
               <xsl:for-each select=". | following-sibling::shop_group[position() < $n]">
                  <div id="group_{shop_group/@id}" class="group_list_item" data-visible="none">
                     .....
                  </div>
                  <!-- Если есть подгруппы -->
                  <div style="display: none;" id="sub-level-1" class="sub_group_{shop_group/@id} sub-level-1">
                     <xsl:apply-templates select="shop_group" mode="subgroup"/>
                  </div>              
               </xsl:for-each>        
            </div>
         </xsl:template>
        
         <!-- Шаблон для групп товара -->
         <xsl:template match="shop_group" mode="subgroup">
            <div>
               <div class="sub_group_{shop_group/@id} sub-level-2">
                  <xsl:apply-templates select="shop_group" mode="subgroup-2"/>
               </div>
            </div>
         </xsl:template>
        
        
         <xsl:template match="shop_group" mode="subgroup-2">
            <div class="sub_li_list-2">
               <xsl:if test="position() != 1">
                  <xsl:attribute name="class">sub_li_list-2 bordered-top</xsl:attribute>
               </xsl:if>        
               <!-- Если есть подгруппы -->
               <xsl:if test="shop_group">
                  <!-- выводим подгруппы 3 уровня -->
                  <xsl:if test="count(ancestor::*) < 3">
                     <div class="sub_group_list_2">
                        <xsl:apply-templates select="shop_group" mode="subgroup-2"/>
                     </div>
                  </xsl:if>
               </xsl:if>
            </div>
         </xsl:template>
      </xsl:stylesheet>


    Который преобразует это все в
    ExpandedWrap disabled
      <div class="group_list_m">
         <div class="sub-main">
            <div id="group_1" class="group_list_item" data-visible="none">
            </div>
            <div id="sub-level-1" class="sub_group_1 sub-level-1">
            </div>
            <div id="group_2" class="group_list_item" data-visible="none">
            </div>
            <div id="sub-level-1" class="sub_group_2 sub-level-1">
            </div>
            <div id="group_3" class="group_list_item" data-visible="none">
            </div>
            <div id="sub-level-1" class="sub_group_3 sub-level-1">
            </div>      
         </div>  
      </div>


    Теперь суть вопроса, необходимо выводить сначала группы, а после них их подгруппы.
    в таком виде :
    ExpandedWrap disabled
         <div class="sub-main">
            <div id="group_1" class="group_list_item" data-visible="none">
            </div>
            <div id="group_2" class="group_list_item" data-visible="none">
            </div>
            <div id="group_3" class="group_list_item" data-visible="none">
            </div>
            <div id="sub-level-1" class="sub_group_1 sub-level-1">
            </div>  
            <div id="sub-level-1" class="sub_group_2 sub-level-1">
            </div>      
            <div id="sub-level-1" class="sub_group_3 sub-level-1">
            </div>      
         </div>


    Подскажите пожалуйста, как это сделать?
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0635 ]   [ 14 queries used ]   [ Generated: 18.08.17, 03:18 GMT ]