2016-12-05 34 views
0

我需要一些幫助來使用xslt代碼添加數量 - 每當關閉日期少於補償生效日期時,請在下面的示例中添加數量值爲36的數據值。如何使用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

邁克爾您好,感謝您的回覆,一個問題我怎麼添加特定代碼名稱爲這種情況下,我的例子一直名稱爲「CHN_PERSONAL_PLAN」,但在實際情況下,我將有不止一次的計劃名稱,所以我需要限制基於代碼名稱的總和[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'and pi:Time_Off_Date < ancestor :: pi:Employee/pi:Position/pi:Compensation_Effective_Date]'。 –

+0

@Ahi如果您的問題得到解答,請通過接受答案關閉它。 –