すべてが見つかったら出力するために要素をソースXMLからメモリに集める

私はこのようなソースxmlを持っています:


    1
    [email protected]
    Jallu Kola
    555 123 456
    [email protected]
    Sala Rakas
    555 2314 124


    2
    [email protected]
    Sala Rakas
    555 2314 124


    3
    [email protected]
    Jallu Kola
    555 123 456
    [email protected]
    Sala Rakas
    555 2314 124
    [email protected]
    Ville Kalle
    555 124 124124

残念ながら、xsltを使用してより賢明なものに変換する以外に、このことについて私ができることはあまりありません。 私はこれを次のように変換したいと思います:


    
    
        
            
            
            
        

xsltを使ってこれをどのように達成することができますか?私は、要素を実行しながら、representative_ *要素をメモリに集める必要があると考えています。そのitem要素の終わりに達すると、新しい要素を出力する必要があります。その下で、私は電子メール+名前+電話要素の各グループの要素を順番に表示する必要があります。

1
representative_ *小道具は常に3つずつグループに表示されますか?または、それらのうちのいくつかが行方不明になる可能性がありますか?
追加された 著者 kan,
それらのうちのいくつかまたはそれらのいずれか?いつも現れるものはありますか?
追加された 著者 kan,
あなたは "電子メール"、 "名前"がある場合。電子メールと名前の両方を持つ代理人か、電子メールのみを持っている場合は2つの代理人かどうか、どのように知っていますか?
追加された 著者 kan,
残念なことに、3人のグループで表示される隔離隊員はいません。そのため、一部が失われている可能性があります。
追加された 著者 kosoant,

3 答え

Here is a more generic solution, that is also short (37 well-formatted lines) and simple:


 
 

 

 
         
           
         
 

 
  
   
   
    
   
  
 

 
  
   
  
 

 
  
   
  
 

when applied on the provided xml fragment (wrapped into a single top element to make it a well-formed xml document):


 
    1
    [email protected]
    Jallu Kola
    555 123 456
    [email protected]
    Sala Rakas
    555 2314 124
 
 
    2
    [email protected]
    Sala Rakas
    555 2314 124
 
 
    3
    [email protected]
    Jallu Kola
    555 123 456
    [email protected]
    Sala Rakas
    555 2314 124
    [email protected]
    Ville Kalle
    555 124 124124
 

the wanted, correct result is produced:


   
      1
      
         
            [email protected]
            Jallu Kola
            555 123 456
         
         
            [email protected]
            Sala Rakas
            555 2314 124
         
      
   
   
      2
      
         
            [email protected]
            Sala Rakas
            555 2314 124
         
      
   
   
      3
      
         
            [email protected]
            Jallu Kola
            555 123 456
         
         
            [email protected]
            Sala Rakas
            555 2314 124
         
         
            [email protected]
            Ville Kalle
            555 124 124124
         
      
   

Do note:

  1. property name 属性に '_'の後の文字列として自動的に生成されます(受け入れられた回答のようにハードコードされていません)/code>。

1
追加された

したがって、各グループに常に3つの要素がすべて含まれている場合は、そのうちの1つを反復して、同じ位置で他の要素を選択することができます。


  
    
    
      
    
  


  
    
      
    
    
      
    
    
      
    
  

1
追加された
@ kosoant:あなたの質問に+1。 "代表"の要素名とプロパティがこのソリューションのようにハードコーディングされていないが、外部から提供されたり動的に計算されたりできるより汎用的なソリューションが必要です。 :)
追加された 著者 Dimitre Novatchev,
私はこの解決策に行き、元のxmlに "representative_name"があることを要求します。ありがとう。
追加された 著者 kosoant,

XSLT 2.0ソリューション:

<?xml version="1.0" encoding="UTF-8"?>

    
    
        
                        
        
    
    
        
            
            
                
                    
                        
                            
                                
                            
                        
                    
                                
            
        
    

その中に '_'を含むプロパティ名が必要です。これは、最初の代表者のために、ドキュメントの順序で異なる名前を持ち、ドキュメントの残りの部分と同様に続くプロパティの最初のグループを取ります。

ドキュメントのルート( items という名前)を想定しています。 XSLTの結果は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>

   
      1
      
         
            [email protected]
            Jallu Kola
            555 123 456
         
         
            [email protected]
            Sala Rakas
            555 2314 124
         
      
   
   
      2
      
         
            [email protected]
            Sala Rakas
            555 2314 124
         
      
   
   
          3
      
         
            [email protected]
            Jallu Kola
            555 123 456
         
         
            [email protected]
            Sala Rakas
            555 2314 124
         
         
            [email protected]
            Ville Kalle
                555 124 124124
         
      
   

1
追加された
これは本当に素晴らしいですが、残念ながらxalanを使ってxmlを処理していますが、これをサポートしていません。
追加された 著者 kosoant,
saxonに変更できるかもしれません( sourceforge.net/projects/saxon/files/Saxon-HE/9.3/… )、Xalanを変更するコストはあまり高くなく、XSLT 2.0はXSLT 1.0よりはるかに強力な言語です。
追加された 著者 Vincent Biragnet,