2017-02-03 12 views
1

xsltを初めて使用しました。私は2つの異なる要素でグループ化しようとしています。最初に労働者によって、次に給与コードによって。グループのために支払額で総額が合計されていることを確認してください。以下は、前のサンプルxsl、次にxslの後のサンプルです。これは出力として必要です。2つの異なる要素を使用してXSLTグループ

前:私は労​​働者、有料コードによってそのグループで最初のグループ化、出力として希望何

<?xml version='1.0' encoding='utf-8'?> 
<File xmlns:is="java:com.workday.esb.intsys.xpath.ParsedIntegrationSystemFunctions" 
    xmlns:tv="java:com.workday.esb.intsys.TypedValue"> 
    <Worker> 
     <Detail> 
      <EmployeeID>0008765</EmployeeID> 
      <FirstName>ROBERT</FirstName> 
      <PayCode>RSVEST</PayCode> 
      <Amount>5572.800000</Amount> 
     </Detail> 
     <Detail> 
      <EmployeeID>0008765</EmployeeID> 
      <FirstName>ROBERT</FirstName> 
      <PayCode>FICA</PayCode> 
      <Amount>40.000000</Amount> 
     </Detail> 
    </Worker> 
    <Worker> 
     <Detail> 
      <EmployeeID>0008765</EmployeeID> 
      <FirstName>ROBERT</FirstName> 
      <PayCode>RSVEST</PayCode> 
      <Amount>13545.000000</Amount> 
     </Detail> 
    </Worker> 
    <Worker> 
     <Detail> 
      <EmployeeID>00</EmployeeID> 
      <FirstName>RUSSELL</FirstName> 
      <PayCode>RSVEST</PayCode> 
      <Amount>84811.050000</Amount> 
     </Detail> 
    </Worker> 
</File> 

。なぜならグループの合計を金額:

以下
<?xml version='1.0' encoding='utf-8'?> 
<File xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:tv="java:com.workday.esb.intsys.TypedValue"> 
    <Worker> 
     <Detail> 
      <EmployeeID>0008765</EmployeeID> 
      <FirstName>ROBERT</FirstName> 
      <PayCode>RSVEST</PayCode> 
      <Amount>19117.800000</Amount> 
     </Detail> 
     <Detail> 
      <EmployeeID>0008765</EmployeeID> 
      <FirstName>ROBERT</FirstName> 
      <PayCode>FICA</PayCode> 
      <Amount>40.000000</Amount> 
     </Detail> 
    </Worker> 
    <Worker> 
     <Detail> 
      <EmployeeID>00</EmployeeID> 
      <FirstName>RUSSELL</FirstName> 
      <PayCode>RSVEST</PayCode> 
      <Amount>84811.050000</Amount> 
     </Detail> 
    </Worker> 
</File> 

は動作しません、私のXSLです:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" exclude-result-prefixes="xsl wd xsd this env" 
    xmlns:wd="urn:com.workday/bsvc" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:this="urn:this-stylesheet"> 

    <xsl:output indent="yes" method="xml"/> 
    <xsl:template match="/">  
     <File> 
      <Worker> 
       <xsl:for-each-group select="File" group-by="Worker"> 
        <Detail>    
         <EmployeeID><xsl:value-of select="Worker/current-group()/EmployeeID"></xsl:value-of></EmployeeID> 
         <FirstName><xsl:value-of select="//current-group()//FirstName"></xsl:value-of></FirstName> 
         <PayCode><xsl:value-of select="PayCode"></xsl:value-of></PayCode> 
         <Amount><xsl:value-of select="format-number(sum(current-group()/number(translate(Amount,',',''))),'######.00')"></xsl:value-of></Amount> 
        </Detail> 
       </xsl:for-each-group> 
      </Worker> 
     </File> 
    </xsl:template> 
</xsl:stylesheet> 

誰かが所望の出力に上記変換されますSLを入れてくださいことはできますか?
私はこれを何時間も働いていて、白い旗を振っています。

ありがとうございました!

+0

は同じ社員のためにそこに異なるPayCodeていますか?サンプルは何も表示していません。 – uL1

+0

はい、サンプルコードを編集して、ロバートのPayCodeを追加しました。 –

答えて

1

あなたは、各EmployeeIDのためのグループを持っているしたい場合は、このような各グループ内の各PayCodeためのサブグループは、明らかにあなたは巣に xsl:for-each-groupの指示を必要とします。グループ化する必要があるノードは、Detailの要素で、ルートFileの要素は1つのみではありません。

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/File">  
    <xsl:copy> 
     <xsl:for-each-group select="Worker/Detail" group-by="EmployeeID"> 
      <Worker> 
       <xsl:for-each-group select="current-group()" group-by="PayCode"> 
        <Detail>    
         <xsl:copy-of select="EmployeeID | FirstName | PayCode"/> 
         <Amount> 
          <xsl:value-of select="format-number(sum(current-group()/Amount),'#.000000')"/> 
         </Amount> 
        </Detail> 
       </xsl:for-each-group> 
      </Worker> 
     </xsl:for-each-group> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
+0

完璧!どうもありがとうございました!あなたは私の週末の笑を救った。私はMuenchianメソッドを使って非常に近くになっていましたが、金額を合計することはできませんでした。 - レモ –

関連する問題