2016-12-05 8 views
0

xsltコードを使用して数量を追加するにはいくつかの助けが必要です - タイムオフ日付が補正有効日付より小さい場合は、ここxsltコードを使用して条件に基づいてXMLから合計を行う方法

Please see xml example. 

<?xml version="1.0" encoding="UTF-8"?> 
<pi:Payroll_Extract_Employees xmlns:pi="urn:com.workday/picof"> 
    <pi:PayGroup> 
     <pi:Header> 
      <pi:Version>24</pi:Version> 

     </pi:Header> 
     <pi:Employee> 
      <pi:Summary> 
       <pi:Employee_ID>123</pi:Employee_ID> 
      </pi:Summary> 
      <pi:Personal> 
       <pi:First_Name>test</pi:First_Name> 
       <pi:Last_Name>last anme</pi:Last_Name> 

      </pi:Personal> 
      <pi:Position> 
       <pi:Operation>ADD</pi:Operation> 
       <pi:Compensation_Effective_Date pi:PriorValue="" 
        >20161212</pi:Compensation_Effective_Date> 

      </pi:Position> 
      <pi:Position> 
       <pi:Operation>REMOVE</pi:Operation> 
       <pi:Compensation_Effective_Date>20160401</pi:Compensation_Effective_Date> 
      </pi:Position> 
      <pi:Time_Off> 
       <pi:Code pi:PriorValue="">CHN_PERSONAL_PLAN</pi:Code> 
       <pi:Time_Off_Date pi:PriorValue="">20161122</pi:Time_Off_Date> 
       <pi:Quantity pi:PriorValue="">8</pi:Quantity> 
       <pi:Unit_of_Time pi:PriorValue="">HOURS</pi:Unit_of_Time> 
      </pi:Time_Off> 
      <pi:Time_Off> 
       <pi:Code pi:PriorValue="">CHN_PERSONAL_PLAN</pi:Code> 
       <pi:Time_Off_Date pi:PriorValue="">20161123</pi:Time_Off_Date> 
       <pi:Quantity pi:PriorValue="">8</pi:Quantity> 
       <pi:Unit_of_Time pi:PriorValue="">HOURS</pi:Unit_of_Time> 
      </pi:Time_Off> 
      <pi:Time_Off> 
       <pi:Code pi:PriorValue="">CHN_PERSONAL_PLAN</pi:Code> 
       <pi:Time_Off_Date pi:PriorValue="">20161211</pi:Time_Off_Date> 
       <pi:Quantity pi:PriorValue="">8</pi:Quantity> 
       <pi:Unit_of_Time pi:PriorValue="">HOURS</pi:Unit_of_Time> 
      </pi:Time_Off> 
      <pi:Time_Off> 
       <pi:Code pi:PriorValue="">CHN_PERSONAL_PLAN</pi:Code> 
       <pi:Time_Off_Date pi:PriorValue="">20161212</pi:Time_Off_Date> 
       <pi:Quantity pi:PriorValue="">8</pi:Quantity> 
       <pi:Unit_of_Time pi:PriorValue="">HOURS</pi:Unit_of_Time> 
      </pi:Time_Off> 
      <pi:Time_Off> 
       <pi:Time_Off_Type pi:PriorValue="">TOT_Personal_Leave_Hours</pi:Time_Off_Type> 
       <pi:Time_Off_Date pi:PriorValue="">20161213</pi:Time_Off_Date> 
       <pi:Quantity pi:PriorValue="">8</pi:Quantity> 
       <pi:Unit_of_Time pi:PriorValue="">HOURS</pi:Unit_of_Time> 
      </pi:Time_Off> 
      <pi:Time_Off> 
       <pi:Code pi:PriorValue="">CHN_PERSONAL_PLAN</pi:Code> 
       <pi:Time_Off_Date pi:PriorValue="">20161214</pi:Time_Off_Date> 
       <pi:Quantity pi:PriorValue="">8</pi:Quantity> 
       <pi:Unit_of_Time pi:PriorValue="">HOURS</pi:Unit_of_Time> 
      </pi:Time_Off> 
       </pi:Employee> 
    </pi:PayGroup> 
</pi:Payroll_Extract_Employees>` 

は、私が試したサンプルXSLTコードであるが、オフ時間日付補償有効日未満であるときはいつでも、それはオフコード

<xsl:choose> 
             <xsl:when test="pi:Position/pi:Total_Annual_Base_Pay[exists(@pi:PriorValue)] 
              or pi:Position/pi:Compensation_Effective_Date[exists(@pi:PriorValue)]   "> 
              <xsl:if test="pi:Time_Off[pi:Code='CHN_PERSONAL_PLAN']/pi:Time_Off_Date &lt; pi:Position[pi:Operation!='REMOVE']/pi:Compensation_Effective_Date ">   
               <xsl:value-of 
                select="sum(pi:Time_Off[pi:Code='CHN_PERSONAL_PLAN']/pi:Quantity) 
                + sum(pi:Time_Off_Correction[pi:Code='CHN_PERSONAL_PLAN']/pi:Quantity)" 
               /> 
              </xsl:if> 
             </xsl:when> 
            <!-- <xsl:otherwise> 
             <xsl:value-of 
              select="sum(pi:Time_Off[pi:Code='CHN_PERSONAL_PLAN']/pi:Quantity) 
              + sum(pi:Time_Off_Correction[pi:Code='CHN_PERSONAL_PLAN']/pi:Quantity)" 
             /> 
            </xsl:otherwise>--> 
            </xsl:choose> 

答えて

1

特定の時間のためのすべての量を追加しているようです

:私はこれが述べた条件を満たしていると考えている36

だろう 量の値を追加します

XSLT 1.0

しかし
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:pi="urn:com.workday/picof" 
exclude-result-prefixes="pi"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/pi:Payroll_Extract_Employees"> 
    <result> 
     <xsl:value-of select="sum(pi:PayGroup/pi:Employee/pi:Time_Off[pi:Time_Off_Date &lt; ancestor::pi:Employee/pi:Position/pi:Compensation_Effective_Date]/pi:Quantity)"/> 
    </result> 
</xsl:template> 

</xsl:stylesheet> 

、あなたの入力例に適用された場合、その結果は、24で36

+0

こんにちはマイケル、ご返信、1つのより多くの質問のおかげで、私は特定の追加んではありませんかコード名をこの条件に設定すると、私の例ではすべての時間が「CHN_PERSONAL_PLAN」となっていましたが、実際のシナリオではプラン名から1つ以上の時間が残るので、コード名[pi:Code = ' CHN_PERSONAL_PLAN ']と日付の比較を一緒に行います。私はあなたのアドバイスをお礼します – Abhi

+0

あなたはちょうど別の述語、つまり 'pi:Time_Off [pi:Code = 'CHN_PERSONAL_PLAN'] [pi:Time_Off_Date < ancestor :: pi:Employee/pi:Position/pi:Compensation_Effective_Date]' 。または、それらを 'pi:Time_Off [pi:Code = 'CHN_PERSONAL_PLAN'とpi:Time_Off_Date < ancestor :: pi:Employee/pi:Position/pi:Compensation_Effective_Date]'として組み合わせます。 –

+0

@Abhiあなたの質問に答えられたら、答えを受け入れて閉じてください。 –

関連する問題