Как найти и отформатировать последнюю дату из нескольких полей в xslt - PullRequest
0 голосов
/ 22 апреля 2019

Я искал информацию о моем конкретном сценарии и не нашел того, что искал.Извиняюсь заранее, если я что-то пропустил.

Я ищу справку по синтаксису для поиска и форматирования самой последней даты из набора из трех полей.Я могу быстро найти последнюю дату и отформатировать ее, но объединение синтаксиса и правильная его работа не дают мне покоя.Я хотел попросить этот форум о чистом коде, чтобы сделать следующее: Используя xslt 2.0, найдите, верните и отформатируйте последнюю дату из этих трех полей - формат «20070724»: -ws: Pay_Rate_Type_Change_Effective_Date -ws: Time_Type_Change_Effective_Date -ws: Job_Code_Chanate

Любая помощь очень ценится!

Спасибо, Дженн

<?xml version="1.0" encoding="UTF-8"?>
<ws:Worker_Sync xmlns:ws="urn:com.workday/workersync"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<ws:Worker>
    <ws:Summary>
        <ws:Employee_ID>123456</ws:Employee_ID>
    </ws:Summary>
    <ws:Additional_Information>
        <ws:Time_Type_Change_Effective_Date>2005-05-24</ws:Time_Type_Change_Effective_Date>
        <ws:Pay_Rate_Type_Change_Effective_Date>2006-06-24</ws:Pay_Rate_Type_Change_Effective_Date>
        <ws:Job_Code_Change_Effective_Date>2007-07-24</ws:Job_Code_Change_Effective_Date>
    </ws:Additional_Information>
</ws:Worker>    
</ws:Worker_Sync>


<?xml version='1.0'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ws="urn:com.workday/workersync" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xtt="urn:com.workday/xtt" xmlns:etv="urn:com.workday/etv"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wd="urn:com.workday.report">
<!-- set encoding of output - need to create a properly formatted XML document that Workday's internal document transformation engine will convert to a text file -->
<xsl:output method="xml" encoding="UTF-8"/>

<xsl:template match="/">
    <File xtt:separator="&#xd;&#xa;">
        <xsl:variable name="linefeed" select="'&#xa;'"/>
        <xsl:variable name="currentDate">
            <xsl:value-of select="format-date(current-date(), '[Y0001][M01][D01]')"/>
        </xsl:variable>
        <xsl:apply-templates select="ws:Worker_Sync/ws:Worker"/>
    </File>
</xsl:template>
<xsl:template match="/ws:Worker_Sync/ws:Worker">
    <Record xtt:separator="|">
        <EmployeeAssignedID>
            <xsl:value-of select="ws:Summary/ws:Employee_ID"/>
        </EmployeeAssignedID>            
        <RecordChangeEffectiveDate/>         <!--FT/PT, Hrly/Slry, Jobcode change effdt-->
        <!--Here is where I have to add code to say:
        Find, return and format the latest date out of these three fields in xml file - format of '20070724' :
        -ws:Pay_Rate_Type_Change_Effective_Date
        -ws:Time_Type_Change_Effective_Date
        -ws:Job_Code_Change_Effective_Date    -->   
    </Record>
</xsl:template>
</xsl:stylesheet>

1 Ответ

0 голосов
/ 23 апреля 2019

Я нашел полный ответ на свой вопрос с некоторой помощью Мартина, сотрудников и моей собственной пробой и ошибкой. Вот то, что я в конечном итоге использовал, и это прекрасно работает.

<RecordChangeEffectiveDate>            
 <xsl:value-of select="format-date(max((xs:date(ws:Additional_Information/ws:Pay_Rate_Type_Change_Effective_Date), xs:date(ws:Additional_Information/ws:Time_Type_Change_Effective_Date), xs:date(ws:Additional_Information/ws:Job_Code_Change_Effective_Date) )), '[Y0001][M01][D01]') "/>
</RecordChangeEffectiveDate>
...