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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> постраничный вывод 
:(
    Опции темы
Misha_
Дата 30.11.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



здравствуйте!
есть документ
<?xml version="1.0" encoding="iso-8859-1" ?>
<data>
   <item id="i1" catalog="s1" subcatalog="u1">561</item>
   <item id="i10" catalog="s3" subcatalog="u4">15</item>
   <item id="i22" catalog="s2" subcatalog="u2">1234</item> и тд.
        <catalog id="s1">catalog 1</catalog>
   <catalog id="s2">catalog 2</catalog>
   <catalog id="s3">catalog 3</catalog>

   <subcatalog id="u1">Subcatalog 1</subcatalog>
   <subcatalogid="u2">Subcatalog 2</subcatalog> и тд
   </data>

, который был с помощью 2-х уровневой группировки (с использованием ключей методом Мюнха) был приведен к виду
catalog 1

Subcatalog 1

ID Value

id1 value1
...
...
catalog 2

Subcatalog 1

ID Value

id1 value1...
....

и тд.
нужно вывести постранично, причем не более 25 айтемов на страницу, НО!! чтобы не было разрыва внути одного подкаталога (самое вкусноеsmile), только перед словами каталог-подкаталог...

есть мысли типа:
<xsl:choose>
       <xsl:when test="position()mod 30!=0">
         <xsl:choose>
           <xsl:when test="(какя-нибудь проверка- КАКАЯ?????????)">
             <xsl:apply-templates select="following-sibling::item[1]" mode="Mode">
             </xsl:apply-templates>
           </xsl:when>
           <xsl:otherwise>
             <xsl:text>(PageBreak)</xsl:text>
             <xsl:apply-templates select="following-sibling::item[1]" mode="Mode"/>
           </xsl:otherwise>
         </xsl:choose>
       </xsl:when>
       <xsl:otherwise>
         <span style="page-break-before: always"></span>
         <xsl:text>(PageBreak)</xsl:text>
         <xsl:apply-templates select="following-sibling::item[1]" mode="Mode"/>
       </xsl:otherwise>
     </xsl:choose>


может есть идеи? smile Заранее спасибоsmile
PM MAIL   Вверх
pawlenty
Дата 22.1.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот это рабочий код
Код

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   
   <xsl:template match="data">    
   <BODY marginheight="0" marginwidth="0" rightmargin="0" topmargin="0" leftmargin="5" bottommargin="0">    
        <table cellspacing="0" cellpadding="0" border="0">
                <xsl:call-template name="PagedOutput"/>    
        </table>
   </BODY>
  </xsl:template>
    
  <xsl:template name="PagedOutput">  
  <!-- input variables -->
    <xsl:param name="sector" select="1"/>                                    <!-- sector -->
    <xsl:param name="subsector" select="1"/>                                <!-- subsector -->
    <xsl:param name="lines" select="0"/>                                    <!-- counter -->
    <xsl:param name="firstsubsector" select="true()"/>                        <!-- variable check if current subsector first in this sector -->
  <!-- /input variables -->    
          
    <xsl:choose>    
      <xsl:when test="$sector=count(sector)+1">                                <!--if expression is true the recursion stop/-->    
        <!-- do nothing/ -->    
      </xsl:when>
       
      <xsl:when test="$subsector=count(subsector)+1">                        <!-- if all subsectors current sector were looked throw/ -->    
        <xsl:call-template name="PagedOutput">                                <!-- call itself/  -->
          <xsl:with-param name="sector" select="$sector+1"/>                <!-- select next sector/ -->
          <xsl:with-param name="lines" select="$lines"/>                    <!-- input current value of counter/ -->                          
        </xsl:call-template>    
      </xsl:when>
       
      <xsl:otherwise>                                                        <!-- look through all subsectors/ --> 
        <xsl:variable name="secid" select="sector[$sector]/@id"/>            <!-- select current sector id/ -->
        <xsl:variable name="subid" select="subsector[$subsector]/@id"/>        <!-- select current subsector id/ -->
        <xsl:variable name="items"    
                      select="item[@sector=$secid][@subsector=$subid]"/>    <!-- select items of current sector id and subsector id/ -->
        <xsl:variable name="pagebreak" select="$lines+count($items)>25"/>   <!-- create page-break variable/  -->     
        
        <xsl:if test="$pagebreak">                                            <!-- if pagebreak true, make page-break/ -->
            <tr><td><table style="page-break-before: always"></table></td></tr>                   
        </xsl:if>    
         
        <xsl:if test="$items">    
            <xsl:if test="$firstsubsector='true'">                            <!-- if firstsubsector true, output sectorName/  -->
                <tr>    
                    <td>****************</td>
                </tr>    
                <tr>    
                    <td><xsl:value-of select="sector[$sector]"/></td>        <!-- sectorX/  -->
                </tr>    
                <tr>    
                    <td>****************</td>
                </tr>        
            </xsl:if>
           
          <tr>
            <td><xsl:value-of select="subsector[$subsector]"/></td>            <!-- subsectorX/  -->
          </tr>
          <tr>    
            <td>++++++++++++++</td>
          </tr>
          <tr>    
            <td>
                <table cellspacing="0" cellpadding="0" width="100%" border="0">                    
                    <tr>    
                        <td width="50%">ID</td>                                <!-- ID/  -->
                        <td width="50%">Value</td>                            <!-- Value/ -->
                     </tr>                     
                </table>
            </td>
          </tr>                                   
          <tr>    
            <td>---------------------</td>
          </tr>                                
          <tr>
            <td>
                <table cellspacing="0" cellpadding="0" width="100%" border="0">
                    <xsl:for-each select="$items">
                    <xsl:sort select="substring-after(@id,'i')"  data-type="number"/>
                    <tr>    
                        <td width="50%"><xsl:value-of select="@id"/></td>    <!-- output idX/  -->
                        <td width="50%"><xsl:value-of select="."/></td>        <!-- output valueX/ -->
                     </tr>
                     </xsl:for-each>    
                </table>
            </td>
           </tr>
           <tr>    
            <td>---------------------</td>
          </tr>                               
        </xsl:if>
         
        <xsl:call-template name="PagedOutput">                                <!-- call itself/  -->
          <xsl:with-param name="sector" select="$sector"/>                    <!-- select current sector/  -->
          <xsl:with-param name="subsector" select="$subsector+1"/>            <!-- select next subsector/  -->
          
          <xsl:with-param name="lines">                                        <!-- input current value of counter/ -->  
            <xsl:if test="not($pagebreak)">                                    <!-- if there was no page-break/ -->
              <xsl:value-of select="$lines+count($items)"/>                    <!-- count previous items/ -->
            </xsl:if>    
            <xsl:if test="$pagebreak">                                        <!-- if there was page-break/ -->
              <xsl:value-of select="count($items)"/>                        <!-- don't count previous items/ -->
            </xsl:if>    
          </xsl:with-param>    
          
          <xsl:with-param name="firstsubsector">                            <!-- when first subsector was looked throw we make firstsubsector false/ -->   
              <xsl:value-of select="false()"/>                                                
          </xsl:with-param>           
           
        </xsl:call-template>
         
      </xsl:otherwise>
       
    </xsl:choose>
     
  </xsl:template>    

</xsl:stylesheet>



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

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

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

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

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


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

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


 




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


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

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