Я пытаюсь исправить эту проблему с несколькими значениями для этого кода XML/XSLT, но, похоже, не может понять, что случилось. Для некоторых сотрудников (не для всех) их запись в выходном файле содержит несколько значений SSN. Это вызывает проблему с принимающей системой, потому что она ожидает только одного значения. Любая помощь будет отличной, я ценю то, что я действительно застрял в этом, и вам нужно представить отчет за 36 часов. Огромное спасибо. (Прилагаются код XML-файл и код XSLT)Удаление нескольких значений из XSLT
XML:
<?xml version="1.0" encoding="UTF-8"?>
<pi:Payroll_Extract_Employees xmlns:pi="urn:com.workday/picof">
<pi:PayGroup>
<pi:Header>
<pi:Version>18</pi:Version>
<pi:Payroll_Company_ID>25G</pi:Payroll_Company_ID>
<pi:Payroll_Company_Name>Acme.net</pi:Payroll_Company_Name>
<pi:Pay_Group_ID>G85D6W87D</pi:Pay_Group_ID>
<pi:Pay_Group_Name>G85D6W87D Semi-monthly</pi:Pay_Group_Name>
<pi:Pay_Period_Start>2013-02-16-08:00</pi:Pay_Period_Start>
<pi:Pay_Period_End>2013-02-28-08:00</pi:Pay_Period_End>
<pi:Updated_From>2013-02-28T18:00:15.171-08:00</pi:Updated_From>
<pi:Updated_To>2013-03-07T12:25:36.860-08:00</pi:Updated_To>
<pi:All_Effective>false</pi:All_Effective>
</pi:Header>
<pi:Employee>
<pi:Summary>
<pi:Employee_ID>1332</pi:Employee_ID>
<pi:Name>Robert Paulson</pi:Name>
<pi:Payroll_Company_ID>25G</pi:Payroll_Company_ID>
<pi:Payroll_Company_Name>Acme.net</pi:Payroll_Company_Name>
<pi:Pay_Group_ID>G85D6W87D</pi:Pay_Group_ID>
<pi:Pay_Group_Name>G85D6W87D Semi-monthly</pi:Pay_Group_Name>
</pi:Summary>
<pi:Personal>
<pi:First_Name>Robert</pi:First_Name>
<pi:Middle_Name>B</pi:Middle_Name>
<pi:Last_Name>Paulson</pi:Last_Name>
<pi:Gender>M</pi:Gender>
<pi:Birth_Date>1972-07-19</pi:Birth_Date>
<pi:Marital_Status>S</pi:Marital_Status>
<pi:First_Address_Line_Data pi:Label="Address Line 1" pi:Type="ADDRESS_LINE_1">5555
Marcos Street</pi:First_Address_Line_Data>
<pi:First_Municipality>San Diego</pi:First_Municipality>
<pi:First_Region>CA</pi:First_Region>
<pi:First_Postal_Code>92109</pi:First_Postal_Code>
<pi:Area_Code>619</pi:Area_Code>
<pi:Phone_Number>5559999</pi:Phone_Number>
<pi:First_Email_Address>[email protected]</pi:First_Email_Address>
</pi:Personal>
<pi:Status>
<pi:Employee_Status>A</pi:Employee_Status>
<pi:Hire_Date>2011-02-28</pi:Hire_Date>
<pi:Original_Hire_Date>2011-02-28</pi:Original_Hire_Date>
<pi:Continuous_Service_Date>2011-02-28</pi:Continuous_Service_Date>
<pi:Seniority_Date>2011-02-28</pi:Seniority_Date>
</pi:Status>
<pi:Position>
<pi:Operation>NONE</pi:Operation>
<pi:Worker_Type>FTR</pi:Worker_Type>
<pi:Job_Exempt>1</pi:Job_Exempt>
<pi:Scheduled_Weekly_Hours>40</pi:Scheduled_Weekly_Hours>
<pi:Default_Weekly_Hours>40</pi:Default_Weekly_Hours>
<pi:Pay_Cycle_Hours>86.67</pi:Pay_Cycle_Hours>
<pi:Pay_Rate_Type>H</pi:Pay_Rate_Type>
<pi:Compensation_Effective_Date>2013-01-01</pi:Compensation_Effective_Date>
<pi:Total_Base_Pay>27.2645</pi:Total_Base_Pay>
<pi:Base_Pay_Currency>USD</pi:Base_Pay_Currency>
<pi:Base_Pay_Frequency>H</pi:Base_Pay_Frequency>
<pi:Organization_One>1500</pi:Organization_One>
<pi:Workers_Compensation_Code>8810</pi:Workers_Compensation_Code>
<pi:Business_Site>San Diego Office</pi:Business_Site>
<pi:Business_Site_Name>San Diego Office</pi:Business_Site_Name>
<pi:Business_Site_Region>CA</pi:Business_Site_Region>
<pi:Supervisor_Name>Jed Sanders (1402)</pi:Supervisor_Name>
</pi:Position>
<pi:Identifier>
<pi:Operation>REMOVE</pi:Operation>
<pi:Identifier_Type>SSN</pi:Identifier_Type>
<pi:Identifier_Value>123456788</pi:Identifier_Value>
</pi:Identifier>
<pi:Identifier>
<pi:Operation>ADD</pi:Operation>
<pi:Identifier_Type>SSN</pi:Identifier_Type>
<pi:Identifier_Value>111111111</pi:Identifier_Value>
</pi:Identifier>
<pi:Identifier>
<pi:Operation>NONE</pi:Operation>
<pi:Identifier_Type>ADP_No</pi:Identifier_Type>
<pi:Identifier_Value>541</pi:Identifier_Value>
</pi:Identifier>
<pi:Additional_Information>
<pi:PreferredFirstName>Bobby</pi:PreferredFirstName>
</pi:Additional_Information>
</pi:Employee>
<pi:Employee>
<pi:Summary>
<pi:Employee_ID>1842</pi:Employee_ID>
<pi:Name>James Johnson</pi:Name>
<pi:Payroll_Company_ID>25G</pi:Payroll_Company_ID>
<pi:Payroll_Company_Name>Acme.net</pi:Payroll_Company_Name>
<pi:Pay_Group_ID>G85D6W87D</pi:Pay_Group_ID>
<pi:Pay_Group_Name>G85D6W87D Semi-monthly</pi:Pay_Group_Name>
</pi:Summary>
<pi:Personal>
<pi:First_Name>James</pi:First_Name>
<pi:Middle_Name>B</pi:Middle_Name>
<pi:Last_Name>Johnson</pi:Last_Name>
<pi:Gender>M</pi:Gender>
<pi:Birth_Date>1982-09-17</pi:Birth_Date>
<pi:Marital_Status>S</pi:Marital_Status>
<pi:First_Address_Line_Data pi:Label="Address Line 1" pi:Type="ADDRESS_LINE_1">1111
Hampton Way</pi:First_Address_Line_Data>
<pi:First_Municipality>San Diego</pi:First_Municipality>
<pi:First_Region>CA</pi:First_Region>
<pi:First_Postal_Code>92109</pi:First_Postal_Code>
<pi:Area_Code>619</pi:Area_Code>
<pi:Phone_Number>5551234</pi:Phone_Number>
<pi:First_Email_Address>[email protected]</pi:First_Email_Address>
</pi:Personal>
<pi:Status>
<pi:Employee_Status>A</pi:Employee_Status>
<pi:Hire_Date>2010-03-28</pi:Hire_Date>
<pi:Original_Hire_Date>2010-03-28</pi:Original_Hire_Date>
<pi:Continuous_Service_Date>2010-03-28</pi:Continuous_Service_Date>
<pi:Seniority_Date>2010-03-28</pi:Seniority_Date>
</pi:Status>
<pi:Position>
<pi:Operation>REMOVE</pi:Operation>
<pi:Worker_Type>FTR</pi:Worker_Type>
<pi:Job_Exempt>1</pi:Job_Exempt>
<pi:Scheduled_Weekly_Hours>40</pi:Scheduled_Weekly_Hours>
<pi:Default_Weekly_Hours>40</pi:Default_Weekly_Hours>
<pi:Pay_Cycle_Hours>86.67</pi:Pay_Cycle_Hours>
<pi:Pay_Rate_Type>H</pi:Pay_Rate_Type>
<pi:Compensation_Effective_Date>2010-03-28</pi:Compensation_Effective_Date>
<pi:Total_Base_Pay>27.2645</pi:Total_Base_Pay>
<pi:Base_Pay_Currency>USD</pi:Base_Pay_Currency>
<pi:Base_Pay_Frequency>H</pi:Base_Pay_Frequency>
<pi:Organization_One>1500</pi:Organization_One>
<pi:Workers_Compensation_Code>8810</pi:Workers_Compensation_Code>
<pi:Business_Site>San Diego Office</pi:Business_Site>
<pi:Business_Site_Name>San Diego Office</pi:Business_Site_Name>
<pi:Business_Site_Region>CA</pi:Business_Site_Region>
<pi:Supervisor_Name>Jed Sanders (1402)</pi:Supervisor_Name>
</pi:Position>
<pi:Position>
<pi:Operation>ADD</pi:Operation>
<pi:Worker_Type>FTR</pi:Worker_Type>
<pi:Job_Exempt>1</pi:Job_Exempt>
<pi:Scheduled_Weekly_Hours>40</pi:Scheduled_Weekly_Hours>
<pi:Default_Weekly_Hours>40</pi:Default_Weekly_Hours>
<pi:Pay_Cycle_Hours>86.67</pi:Pay_Cycle_Hours>
<pi:Pay_Rate_Type>S</pi:Pay_Rate_Type>
<pi:Compensation_Effective_Date>2013-01-01</pi:Compensation_Effective_Date>
<pi:Total_Base_Pay>95123</pi:Total_Base_Pay>
<pi:Base_Pay_Currency>USD</pi:Base_Pay_Currency>
<pi:Base_Pay_Frequency>S</pi:Base_Pay_Frequency>
<pi:Organization_One>1500</pi:Organization_One>
<pi:Workers_Compensation_Code>8810</pi:Workers_Compensation_Code>
<pi:Business_Site>San Diego Office</pi:Business_Site>
<pi:Business_Site_Name>San Diego Office</pi:Business_Site_Name>
<pi:Business_Site_Region>CA</pi:Business_Site_Region>
<pi:Supervisor_Name>Jed Sanders (1402)</pi:Supervisor_Name>
</pi:Position>
<pi:Identifier>
<pi:Operation>NONE</pi:Operation>
<pi:Identifier_Type>SSN</pi:Identifier_Type>
<pi:Identifier_Value>222222222</pi:Identifier_Value>
</pi:Identifier>
<pi:Identifier>
<pi:Operation>NONE</pi:Operation>
<pi:Identifier_Type>ADP_No</pi:Identifier_Type>
<pi:Identifier_Value>543</pi:Identifier_Value>
</pi:Identifier>
<pi:Additional_Information>
<pi:PreferredFirstName>Jimmy</pi:PreferredFirstName>
</pi:Additional_Information>
</pi:Employee>
</pi:PayGroup>
<pi:PayGroup>
<pi:Header>
<pi:Version>18</pi:Version>
<pi:Payroll_Company_ID>NMA</pi:Payroll_Company_ID>
<pi:Payroll_Company_Name>Acme.net</pi:Payroll_Company_Name>
<pi:Pay_Group_ID>DS87D7RR9</pi:Pay_Group_ID>
<pi:Pay_Group_Name>DS87D7RR9 Weekly</pi:Pay_Group_Name>
<pi:Pay_Period_Start>2013-02-16-08:00</pi:Pay_Period_Start>
<pi:Pay_Period_End>2013-02-28-08:00</pi:Pay_Period_End>
<pi:Updated_From>2013-02-28T18:00:15.171-08:00</pi:Updated_From>
<pi:Updated_To>2013-03-07T12:25:36.860-08:00</pi:Updated_To>
<pi:All_Effective>false</pi:All_Effective>
</pi:Header>
<pi:Employee>
<pi:Summary>
<pi:Employee_ID>1432</pi:Employee_ID>
<pi:Name>Steve Whatever</pi:Name>
<pi:Payroll_Company_ID>NMA</pi:Payroll_Company_ID>
<pi:Payroll_Company_Name>Acme.net</pi:Payroll_Company_Name>
<pi:Pay_Group_ID>DS87D7RR9</pi:Pay_Group_ID>
<pi:Pay_Group_Name>DS87D7RR9 Weekly</pi:Pay_Group_Name>
</pi:Summary>
<pi:Personal>
<pi:First_Name>Steve</pi:First_Name>
<pi:Middle_Name>B</pi:Middle_Name>
<pi:Last_Name>Whatever</pi:Last_Name>
<pi:Gender>M</pi:Gender>
<pi:Birth_Date>1985-07-19</pi:Birth_Date>
<pi:Marital_Status>S</pi:Marital_Status>
<pi:First_Address_Line_Data pi:Label="Address Line 1" pi:Type="ADDRESS_LINE_1">1234
Dreyfus Lane</pi:First_Address_Line_Data>
<pi:First_Municipality>San Diego</pi:First_Municipality>
<pi:First_Region>CA</pi:First_Region>
<pi:First_Postal_Code>92109</pi:First_Postal_Code>
<pi:Area_Code>619</pi:Area_Code>
<pi:Phone_Number>5558888</pi:Phone_Number>
<pi:First_Email_Address>[email protected]</pi:First_Email_Address>
</pi:Personal>
<pi:Status>
<pi:Employee_Status>A</pi:Employee_Status>
<pi:Hire_Date>2009-02-28</pi:Hire_Date>
<pi:Original_Hire_Date>2009-02-28</pi:Original_Hire_Date>
<pi:Continuous_Service_Date>2009-02-28</pi:Continuous_Service_Date>
<pi:Seniority_Date>2009-02-28</pi:Seniority_Date>
</pi:Status>
<pi:Position>
<pi:Operation>NONE</pi:Operation>
<pi:Worker_Type>FTR</pi:Worker_Type>
<pi:Job_Exempt>1</pi:Job_Exempt>
<pi:Scheduled_Weekly_Hours>40</pi:Scheduled_Weekly_Hours>
<pi:Default_Weekly_Hours>40</pi:Default_Weekly_Hours>
<pi:Pay_Cycle_Hours>86.67</pi:Pay_Cycle_Hours>
<pi:Pay_Rate_Type>H</pi:Pay_Rate_Type>
<pi:Compensation_Effective_Date>2013-01-01</pi:Compensation_Effective_Date>
<pi:Total_Base_Pay>27.2645</pi:Total_Base_Pay>
<pi:Base_Pay_Currency>USD</pi:Base_Pay_Currency>
<pi:Base_Pay_Frequency>H</pi:Base_Pay_Frequency>
<pi:Organization_One>1500</pi:Organization_One>
<pi:Workers_Compensation_Code>8810</pi:Workers_Compensation_Code>
<pi:Business_Site>San Diego Office</pi:Business_Site>
<pi:Business_Site_Name>San Diego Office</pi:Business_Site_Name>
<pi:Business_Site_Region>CA</pi:Business_Site_Region>
<pi:Supervisor_Name>Adam Sandler (5472)</pi:Supervisor_Name>
</pi:Position>
<pi:Identifier>
<pi:Operation>NONE</pi:Operation>
<pi:Identifier_Type>SSN</pi:Identifier_Type>
<pi:Identifier_Value>333333333</pi:Identifier_Value>
</pi:Identifier>
<pi:Identifier>
<pi:Operation>NONE</pi:Operation>
<pi:Identifier_Type>ADP_No</pi:Identifier_Type>
<pi:Identifier_Value>542</pi:Identifier_Value>
</pi:Identifier>
</pi:Employee>
<pi:Employee>
<pi:Summary>
<pi:Employee_ID>3333</pi:Employee_ID>
<pi:Name>James Anything</pi:Name>
<pi:Payroll_Company_ID>NMA</pi:Payroll_Company_ID>
<pi:Payroll_Company_Name>Acme.net</pi:Payroll_Company_Name>
<pi:Pay_Group_ID>DS87D7RR9</pi:Pay_Group_ID>
<pi:Pay_Group_Name>DS87D7RR9 Weekly</pi:Pay_Group_Name>
</pi:Summary>
<pi:Personal>
<pi:First_Name>James</pi:First_Name>
<pi:Middle_Name>B</pi:Middle_Name>
<pi:Last_Name>Anything</pi:Last_Name>
<pi:Gender>M</pi:Gender>
<pi:Birth_Date>1975-04-01</pi:Birth_Date>
<pi:Marital_Status>S</pi:Marital_Status>
<pi:First_Address_Line_Data pi:Label="Address Line 1" pi:Type="ADDRESS_LINE_1">9865
Wells Lane</pi:First_Address_Line_Data>
<pi:First_Municipality>San Diego</pi:First_Municipality>
<pi:First_Region>CA</pi:First_Region>
<pi:First_Postal_Code>92109</pi:First_Postal_Code>
<pi:Area_Code>619</pi:Area_Code>
<pi:Phone_Number>5557272</pi:Phone_Number>
<pi:First_Email_Address>[email protected]</pi:First_Email_Address>
</pi:Personal>
<pi:Status>
<pi:Employee_Status>A</pi:Employee_Status>
<pi:Hire_Date>2012-09-28</pi:Hire_Date>
<pi:Original_Hire_Date>2012-09-28</pi:Original_Hire_Date>
<pi:Continuous_Service_Date>2012-09-28</pi:Continuous_Service_Date>
<pi:Seniority_Date>2012-09-28</pi:Seniority_Date>
</pi:Status>
<pi:Position>
<pi:Operation>NONE</pi:Operation>
<pi:Worker_Type>FTR</pi:Worker_Type>
<pi:Job_Exempt>1</pi:Job_Exempt>
<pi:Scheduled_Weekly_Hours>40</pi:Scheduled_Weekly_Hours>
<pi:Default_Weekly_Hours>40</pi:Default_Weekly_Hours>
<pi:Pay_Cycle_Hours>86.67</pi:Pay_Cycle_Hours>
<pi:Pay_Rate_Type>H</pi:Pay_Rate_Type>
<pi:Compensation_Effective_Date>2013-01-01</pi:Compensation_Effective_Date>
<pi:Total_Base_Pay>27.2645</pi:Total_Base_Pay>
<pi:Base_Pay_Currency>USD</pi:Base_Pay_Currency>
<pi:Base_Pay_Frequency>H</pi:Base_Pay_Frequency>
<pi:Organization_One>1500</pi:Organization_One>
<pi:Workers_Compensation_Code>8810</pi:Workers_Compensation_Code>
<pi:Business_Site>San Diego Office</pi:Business_Site>
<pi:Business_Site_Name>San Diego Office</pi:Business_Site_Name>
<pi:Business_Site_Region>CA</pi:Business_Site_Region>
<pi:Supervisor_Name>Adam Sandler (5472)</pi:Supervisor_Name>
</pi:Position>
<pi:Identifier>
<pi:Operation>NONE</pi:Operation>
<pi:Identifier_Type>SSN</pi:Identifier_Type>
<pi:Identifier_Value>444444444</pi:Identifier_Value>
</pi:Identifier>
<pi:Identifier>
<pi:Operation>REMOVE</pi:Operation>
<pi:Identifier_Type>ADP_No</pi:Identifier_Type>
<pi:Identifier_Value>544</pi:Identifier_Value>
</pi:Identifier>
<pi:Identifier>
<pi:Operation>ADD</pi:Operation>
<pi:Identifier_Type>ADP_No</pi:Identifier_Type>
<pi:Identifier_Value>545</pi:Identifier_Value>
</pi:Identifier>
</pi:Employee>
</pi:PayGroup>
</pi:Payroll_Extract_Employees>
XSLT Код:
<!-- <?xml version="1.0" encoding="UTF-8"?> -->
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:pi="urn:com.workday/picof">
<xsl:variable name="sep">,</xsl:variable>
<xsl:template match="pi:Payroll_Extract_Employees">
<xsl:text>
</xsl:text>
<xsl:for-each select="pi:PayGroup">
<xsl:text>Pay Group: </xsl:text>
<xsl:value-of select="pi:Header/pi:Pay_Group_Name"/>
<xsl:text>
</xsl:text>
<xsl:text>EmployeeID,Last_Name,First_Name,SSN,Hire_Date
</xsl:text>
<xsl:for-each select="pi:Employee">
<xsl:value-of select="pi:Summary/pi:Employee_ID"/>
<xsl:value-of select="$sep"/>
<xsl:value-of select="pi:Personal/pi:Last_Name"/>
<xsl:value-of select="$sep"/>
<xsl:value-of select="pi:Personal/pi:First_Name"/>
<xsl:value-of select="$sep"/>
<xsl:value-of select="pi:Identifier[pi:Identifier_Type = 'SSN']/pi:Identifier_Value"/>
<xsl:value-of select="$sep"/>
<xsl:value-of select="pi:Status/pi:Hire_Date"/>
<xsl:text>
</xsl:text>
</xsl:for-each> <!-- end employee loop -->
<xsl:text>
</xsl:text>
</xsl:for-each> <!-- end paygroup loop -->
</xsl:template> <!-- end of main template -->
</xsl:stylesheet>
Похоже, вы получаете последовательность обновлений и должны принимать решение на основании операций независимо от того, присутствует или нет SSN, и какой из них хранить. Что спецификация говорит о порядке работы? Для заданного 'Identifier_Type', являются ли операции, заказанные с последним первым или последним? Обратите внимание, что если «самый последний» (в зависимости от того, какой он есть) является 'REMOVE', то эта запись не имеет SSN. Проблема недоказана, и в ее нынешнем виде вопрос не может быть дан. –
@JimGarrison ... Это должен быть самый последний SSN, если есть несколько значений. Я новичок в XSLT, поэтому прошу прощения за неопределенное объяснение.Большое вам спасибо за ваш немедленный ответ, оцените его :) – feeks
Проблема в том, что для определения порядка обновлений информации недостаточно, что имеет большое значение. Вы должны спросить поставщика XML, какой он есть. –