XSLT 1.0 по годам и добавить не существующий год

У меня есть xml, как показано ниже ( с помощью xslt 1.0 ):

<?xml version="1.0" encoding="utf-8"?>
    
    
    2013
    120
    
    
    2013
    150
    
    
    2014
    130
    
    
    2011
    120
        

Я хочу группировать деньги по годам, если год отсутствует в списке (как указано выше xml, нет 2011), мне нужно поставить 2012 в результат с totalamount = 0 следующим образом:

2011
120
2012
0
2013
270
2014
130

Разумеется, я закончил xslt следующим образом:




    
            
            
                
            
            
                
            
    

Это может группировать деньги только на текущий год:

2011
120 
2013
270
2014
130

Любая идея о том, как вставить

2012
0 

в результате?

Большое спасибо!

1
nl ja de
являются ли годы достаточно ограниченными или у вас может быть год с 1900 по 2030 год?
добавлено автор rene, источник
Что произойдет, если пропадут два года? т.е. 2011 и 2012 годы?
добавлено автор rene, источник
@rene все пропущенные годы должны быть заполнены 0. Другими словами, я хотел бы показать все годы между минимальным годом и максимальным годом в данном xml. если нет значения, заполненного 0 в противном случае, group-by значения по годам.
добавлено автор Weibo, источник

1 ответы

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


   
   
      
         
      
      0
      
         
      
   

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

Еще одно замечание - одно из выражений в XSLT


На самом деле это можно упростить!


Аналогично, вы можете изменить свою сумму, чтобы использовать xsl: key для эффективности


Вот полный XSLT


   
   

   
      
         
         
            
         
         
            
         
         
            
               
            
         
      
   

   
      
      
         
            
         
         0
         
            
         
      
   

При применении к вашему xml выводится следующее:

2011
120
2012
0
2013
270
2014
130
2
добавлено
Удивительно, спасибо Тим.
добавлено автор Weibo, источник