0

私はすでに同じファイルに関してここで同様のことを尋ねました( XML - XSLT を使用してタグを子に結合します)。残念ながら、私の XML は大きくなってしまったので、もう一度助けてください。

<?xml version="1.0"?>                                                                                                                                 
<ROWSET>                                                                                                                                              
 <ROW>                                                                                                                                                
  <KUNDENNR>63564</KUNDENNR>                                                                                                                          
  <JAHR>2012</JAHR>                                                                                                                                   
  <MONAT>2</MONAT>                                                                                                                                    
  <NAME>John Doe</NAME>                                                                                                                       
  <NETTO>504,66</NETTO>                                                                                                                               
  <DB_BASIS>21,56</DB_BASIS>                                                                                                                          
  <EKECHT>482,56</EKECHT>                                                                                                                             
  <NAME1>Some Name</NAME1>                                                                                                                       
  <NAME2>BA 31 (BÜRO GGR 1)</NAME2>                                                                                                                   
  <LAND>AT</LAND>                                                                                                                                     
  <PLZ>1082</PLZ>                                                                                                                                     
  <ORT>Wien</ORT>                                                                                                                                     
  <ADM>Henry Ford</ADM>                                                                                                                          
  <KUNDENKLASSE>A</KUNDENKLASSE>                                                                                                                      
  <UEBERKUNDE>Some Value</UEBERKUNDE>                                                                                                             
  <HANDLING>22,577179011</HANDLING>                                                                                                                   
  <SOLLFRACHT>22,68</SOLLFRACHT>              
  <DG_BASIS_P>-10,763888888888888888888888888888888889</DG_BASIS_P>                                                                                   
 </ROW> 
 <ROW>                                                                                                                                                
  <KUNDENNR>63564</KUNDENNR>                                                                                                                          
  <JAHR>2011</JAHR>                                                                                                                                   
  <MONAT>1</MONAT>                                                                                                                                    
  <NAME>John Doe</NAME>                                                                                                                       
  <NETTO>502,66</NETTO>                                                                                                                               
  <DB_BASIS>21,56</DB_BASIS>                                                                                                                          
  <EKECHT>482,56</EKECHT>                                                                                                                             
  <NAME1>Some Name</NAME1>                                                                                                                       
  <NAME2>BA 31 (BÜRO GGR 1)</NAME2>                                                                                                                   
  <LAND>AT</LAND>                                                                                                                                     
  <PLZ>1082</PLZ>                                                                                                                                     
  <ORT>Wien</ORT>                                                                                                                                     
  <ADM>Henry Ford</ADM>                                                                                                                          
  <KUNDENKLASSE>A</KUNDENKLASSE>                                                                                                                      
  <UEBERKUNDE>Some value</UEBERKUNDE>                                                                                                             
  <HANDLING>22,577179011</HANDLING>                                                                                                                   
  <SOLLFRACHT>22,68</SOLLFRACHT>              
  <DG_BASIS_P>-10,538888888888888888889</DG_BASIS_P>
  <HGID>342</HGID>
  <HGNAME>Some product name</HGNAME>                                                                       
 </ROW> 
 <ROW>                                                                                                                                                
  <KUNDENNR>63564</KUNDENNR>                                                                                                                          
  <JAHR>2011</JAHR>                                                                                                                                   
  <MONAT>1</MONAT>                                                                                                                                    
  <NAME>John Doe</NAME>                                                                                                                       
  <NETTO>217,66</NETTO>                                                                                                                               
  <DB_BASIS>21,56</DB_BASIS>                                                                                                                          
  <EKECHT>482,56</EKECHT>                                                                                                                             
  <NAME1>Some Name</NAME1>                                                                                                                       
  <NAME2>BA 31 (BÜRO GGR 1)</NAME2>                                                                                                                   
  <LAND>AT</LAND>                                                                                                                                     
  <PLZ>1082</PLZ>                                                                                                                                     
  <ORT>Wien</ORT>                                                                                                                                     
  <ADM>Henry Ford</ADM>                                                                                                                          
  <KUNDENKLASSE>A</KUNDENKLASSE>                                                                                                                      
  <UEBERKUNDE>Some value</UEBERKUNDE>                                                                                                             
  <HANDLING>22,577179011</HANDLING>                                                                                                                   
  <SOLLFRACHT>22,68</SOLLFRACHT>              
  <DG_BASIS_P>-10,538888888888888888889</DG_BASIS_P>
  <HGID>342</HGID>
  <HGNAME>Some product name</HGNAME>                                                                       
 </ROW> 
</ROWSET>

フィールド HGID および HGNAME が追加され、最終的な XML 出力は次のようになります。

<?xml version="1.0"?>                                                                                                                                 
<ROWSET>                                                                                                                                              
 <KUNDE>
  <KUNDENNR>63564</KUNDENNR>                                                                                                                          
  <NAME>John Doe</NAME>      
  <NAME1>Some Name</NAME1>                                                                                                                       
  <NAME2>BA 31 (B RO GGR 1)</NAME2>                                                                                                                   
  <LAND>AT</LAND>                                                                                                                                     
  <PLZ>1082</PLZ>                                                                                                                                     
  <ORT>Wien</ORT>                                                                                                                                     
  <ADM>Henry Ford</ADM>                                                                                                                          
  <KUNDENKLASSE>A</KUNDENKLASSE>    
  <UEBERKUNDE>Some Value</UEBERKUNDE>                                                                                                              
    <ROW>                                                                                                                                                
        <JAHR>2012</JAHR>                                                                                                                                   
        <MONAT>2</MONAT>                                                                                                                                                                                                                                                                   
        <DB_BASIS>21,56</DB_BASIS>                                                                                                                          
        <EKECHT>482,56</EKECHT>                                                                                                                             
        <HANDLING>22,577179011</HANDLING>                                                                                                                   
        <SOLLFRACHT>22,68</SOLLFRACHT>                                                                                                                      
        <DG_BASIS_P>4,27218325209051638727063765703642056038</DG_BASIS_P>
        <WGROUPITEM>
            <HGID>125</HGID>
            <HGNAME>Another product name</HGNAME>
            <NETTO>504,66</NETTO>
        </WGROUPITEM>                                                                                   
    </ROW>
    <ROW>
        <JAHR>2012</JAHR>                                                                                                                                   
        <MONAT>1</MONAT>                                                                                                                                    
        <NETTO>502,66</NETTO>                                                                                                                              
        <DB_BASIS>21,56</DB_BASIS>                                                                                                                        
        <EKECHT>482,56</EKECHT>                                                                                                                           
        <HANDLING>22,577179011</HANDLING>                                                                                                                    
        <SOLLFRACHT>22,68</SOLLFRACHT>                                                                                                                      
        <DG_BASIS_P>-10,538888888888888888889</DG_BASIS_P> 
        <WGROUPITEM>
            <HGID>359</HGID>
            <HGNAME>Some other product name</HGNAME> 
            <NETTO>502,66</NETTO>                                                                                    
        </WGROUPITEM>
        <WGROUPITEM>
            <HGID>342</HGID>
            <HGNAME>Some product name</HGNAME> 
            <NETTO>217,66</NETTO>
        </WGROUPITEM>
    </ROW>  
 </KUNDE> 
 </ROWSET>

したがって、基本的には、これらの HGNAME、HGID、NETTO フィールドを MONAT と JAHR (月と年) でグループ化する必要があります。前述の投稿の XSL ファイルを変更しようとしましたが、うまくいきませんでした。MONAT と JAHR で正しくグループ化する方法が見つからないという問題がありました。

編集: また、同様の UEBERKUNDE エントリを見つけて、それらを親としてグループ化したいので、次のようになります

<ROWSET>
<UEBERKUNDE>
    <NAME>Some value</NAME>
    <KUNDE>
        <KUNDENNR>63564</KUNDENNR>
        .......
   </KUNDE>
</UEBERKUNDE>

誰かがそれを手伝ってくれたら最高です。

前もって感謝します。

4

1 に答える 1

0

私はついにそれを行う方法を見つけたので、私の解決策を共有したいと思います...これが最終的なxsltです。一部名称が変更されていますのでご注意ください。また、NETTO、DB_BASIS などのフィールドを新しい WGROUPITEM サブグループに移動しました。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:key name="rowsByMonth" match="ROW" use="concat(MONAT, '+', JAHR, '+', KUNDENNR)"></xsl:key>

<xsl:template match="ROWSET">

    <ROWSET>
        <xsl:for-each-group select="ROW" group-by="UKID">
            <UEBERKUNDE>
                <NAME><xsl:value-of select="UEBERKUNDE" /></NAME>
                <xsl:copy-of select="UKID" />
                <xsl:for-each-group select="current-group()" group-by="KUNDENNR">
                    <KUNDE>
                        <xsl:variable name="currentKdnr" select="KUNDENNR"/>
                        <xsl:copy-of select="KUNDENNR" />
                        <xsl:copy-of select="KNAME1" />
                        <xsl:copy-of select="KNAME2" />
                        <xsl:copy-of select="KNAME3" />
                        <xsl:copy-of select="LAND" />
                        <xsl:copy-of select="PLZ" />
                        <xsl:copy-of select="ORT" />
                        <xsl:copy-of select="ADM" />
                        <xsl:copy-of select="KUNDENKLASSE" />

                        <xsl:for-each select="current-group()[count(. | key('rowsByMonth', concat(MONAT,'+',JAHR,'+',KUNDENNR))[1]) = 1]">
                            <ROW>
                                <xsl:copy-of select="JAHR" />
                                <xsl:copy-of select="MONAT" />
                                <xsl:copy-of select="HANDLING" />
                                <xsl:copy-of select="SOLLFRACHT" />
                                <xsl:for-each select="key('rowsByMonth', concat(MONAT,'+',JAHR,'+',KUNDENNR))">
                                    <WGROUPITEM>
                                        <xsl:copy-of select="HGNAME" />
                                        <xsl:copy-of select="HGID" />
                                        <xsl:copy-of select="DG_BASIS" />
                                        <xsl:copy-of select="EKECHT" />
                                        <xsl:copy-of select="DB_BASIS" />
                                        <xsl:copy-of select="NETTO" />
                                    </WGROUPITEM>
                                </xsl:for-each>
                            </ROW>
                        </xsl:for-each>
                    </KUNDE>
                </xsl:for-each-group>
            </UEBERKUNDE>
        </xsl:for-each-group>
    </ROWSET>
</xsl:template></xsl:stylesheet>

とにかくありがとう。

于 2013-03-22T09:00:44.690 に答える