Мне нужна помощь в добавлении количества с помощью кода xslt - всякий раз, когда дате окончания времени меньше, чем срок действия компенсации, добавьте значения количества, которые были бы ниже в примере ниже.Как сделать сумму из xml на основе условия с использованием кода xslt
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 < 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>
Привет Майкл, спасибо за ответ, еще один вопрос, как я могу добавить конкретные кодовое имя этого условия, в моем примере было все время от имени «CHN_PERSONAL_PLAN», но в реальном сценарии у меня будет более одного названия плана времени, поэтому мне нужно ограничить сумму на основе кодового имени [pi: Code = CHN_PERSONAL_PLAN '] и сопоставление дат вместе. Я буду благодарен за ваш совет. – Abhi
Вы можете просто добавить это как другой предикат, то есть '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]'. –
@Abhi Если на ваш вопрос ответили, пожалуйста, закройте его, приняв ответ. –