Изменить порядок списка

Текущий список

CurrentList

Access     Autocad     Burger 

Layout     Photoshop   Sandwich

VisualStudio 

Я использовал вид в коробке и отредактировал источник, как показано ниже, чтобы получить три столбца


Но порядок предметов, необходимых для этого

 Access       Layout       VisualStudio 
 Autocad      Photoshop 
 Burger       Sandwich

Может ли кто-нибудь предложить способ достичь этого?

Это часть xml


    
    
    
        
            </tr>
            
                
                
            
            <td></td></tr>
            
                
            
  
        
    <td width="1.5%">

    </td>
  
    
1
nl ja de
Не могли бы вы предоставить исходный XML? Ваш текущий XSLT (или, по крайней мере, немного больше соответствующей части)?
добавлено автор JLRishe, источник
Благодарим вас за добавление сообщения, но мы до сих пор не знаем, что такое оригинальный xml или XSLT, который включает в себя xsl: when .
добавлено автор JLRishe, источник
Спасибо. Это хорошая информация, но она все еще недостаточно далеко назад. Не могли бы вы найти шаблон, содержащий и поделиться этим?
добавлено автор JLRishe, источник

1 ответы

Я предполагаю, что у вас есть XML-документ элементов, например, что-то вроде этого


   Access
   Autocad
   Burger
   Layout
   Photoshop
   Sandwich
   VisualStudio

И вы хотите сгруппировать их по 3 столбцам, но сначала сначала выполняйте элементы сверху вниз, а не слева направо. Текущий тест $ Position mod 3 = 0 частично находится по правому строчку, но вы на самом деле начинаете новую строку здесь, и поэтому заканчиваете игру слева направо.

Следует упомянуть ваше использование этой строки кода.

</tr>

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

Во-первых, вам нужно найти количество строк, которые будут выведены для вывода




i.e Строки - это общее количество элементов, деленное на количество столбцов.

Затем вам нужно выбрать первый элемент каждой строки, который является прямым, потому что это будут первые «n» элементы в вашем списке (обратите внимание на использование режима , потому что конечный XSLT будет имеют два шаблона, соответствующие элементу item )

 

В шаблоне, соответствующем стартовым элементам, вам необходимо вывести текущий элемент и следующие элементы-братья, которые находятся в строке

 

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

 
 
     <td colspan="{ceiling($lastItem div $rows)}"></td>
 

Попробуйте следующее XSLT


    
    
    
    

    
        <table>
            
        </table>
    

    
        <tr>
            
            
             
                 <td colspan="{ceiling($lastItem div $rows)}"></td>
             
        </tr>
    

    
        <td>
            
        </td>
    

При применении к XML, показанному в начале вопроса, выводится следующее:

<table>
   <tr>
       <td>Access</td>
       <td>Layout</td>
       <td>VisualStudio</td>
   </tr>
   <tr>
       <td>Autocad</td>
       <td>Photoshop</td>
       <td colspan="1"></td>
   </tr>
   <tr>
       <td>Burger</td>
       <td>Sandwich</td>
       <td colspan="1"></td>
   </tr>
</table>
0
добавлено