Я новичок в коде XSLT и мне нужна ваша помощь. Я строю отчет с использованием XML и мне нужно преобразовать XML для обязательных полей, но на основе условия между двумя узлами. Я почти завершил логику, но для одной из записей моя логика не работает из-за нескольких одинаковых узлов.
Из приведенного ниже вывода XML: мне нужно сопоставить Worker_Events_Complete_Group -> EffectiveDate с Job_History_group Дата вступления в силу и отображать поля только при ее совпадении.
<Report_Entry>
<Employee_ID>50067</Employee_ID>
<Worker>John Grisolano</Worker>
<Worker_Events_Completed_group>
<EffectiveDate>2019-01-01</EffectiveDate>
<DateTimeCompleted>2019-01-09T14:23:06.679-08:00</DateTimeCompleted>
<Business_Process_Type>Transfer Employee</Business_Process_Type>
</Worker_Events_Completed_group>
<Worker_Events_Completed_group>
<EffectiveDate>2019-04-01</EffectiveDate>
<DateTimeCompleted>2019-04-03T07:53:43.965-07:00</DateTimeCompleted>
<Business_Process_Type>Transfer Employee</Business_Process_Type>
</Worker_Events_Completed_group>
<Job_History_group>
<Effective_Date>2019-01-01</Effective_Date>
<Class_of_Instance>Position Snapshot</Class_of_Instance>
<Scheduled_Weekly_Hours>40</Scheduled_Weekly_Hours>
<Default_Weekly_Hours>40</Default_Weekly_Hours>
</Job_History_group>
<Job_History_group>
<Effective_Date>2019-04-01</Effective_Date>
<Class_of_Instance>Position Snapshot</Class_of_Instance>
<Scheduled_Weekly_Hours>40</Scheduled_Weekly_Hours>
<Default_Weekly_Hours>40</Default_Weekly_Hours>
</Job_History_group>
</Report_Entry>
XSLT-код, который я использовал, приведен ниже: но он не работает из-за узлов того же уровня, он не смог войти внутрь Job_History_Group.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/">
<ChangeEvent>
<EmpID><xsl:value-of select="Report_Entry/Employee_ID"/></EmpID>
<xsl:variable name="Current_Date" select="Report_Entry/Worker_Events_Completed_group/EffectiveDate"/>
<EventDetails>
<xsl:for-each select="Report_Entry/Worker_Events_Completed_group">
<Event>
<ChangeEventDate><xsl:value-of select="EffectiveDate"/></ChangeEventDate>
<ChangeEntryDate><xsl:value-of select="DateTimeCompleted"/></ChangeEntryDate>
<ChangeType><xsl:value-of select="CF_Census_Change_Type"/></ChangeType>
<FTE_Snapshot>
<xsl:for-each select="Job_History_group">
<Snapshot>
<xsl:choose>
<xsl:when test="$Current_Date = Effective_Date">
<xsl:variable name="swh" select="Scheduled_Weekly_Hours"/>
<xsl:variable name="dwh" select="Default_Weekly_Hours"/>
<Snapshot_EffectiveDate><xsl:value-of select="Effective_Date"/></Snapshot_EffectiveDate>
<Snapshot_FTE><xsl:value-of select="$swh div $dwh * 100"/></Snapshot_FTE>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</Snapshot>
</xsl:for-each>
</FTE_Snapshot>
</Event>
</xsl:for-each>
</EventDetails>
</ChangeEvent>
</xsl:template>
</xsl:stylesheet>
Ожидаемый результат как ниже:
<?xml version="1.0" encoding="UTF-8"?>
<ChangeEvent >
<EmpID>50067</EmpID>
<EventDetails>
<Event>
<ChangeEventDate>2019-01-01</ChangeEventDate>
<ChangeEntryDate>2019-01-09T14:23:06.679-08:00</ChangeEntryDate>
<ChangeType>Cost Center</ChangeType>
<FTE_Snapshot>
<Snapshot>
<Effective_Date>2019-01-01</Effective_Date>
<Class_of_Instance>Position Snapshot</Class_of_Instance>
<Scheduled_Weekly_Hours>40</Scheduled_Weekly_Hours>
<Default_Weekly_Hours>40</Default_Weekly_Hours>
</Snapshot>
</FTE_Snapshot>
</Event>
<Event>
<ChangeEventDate>2019-04-01</ChangeEventDate>
<ChangeEntryDate>2019-04-03T07:53:43.965-07:00</ChangeEntryDate>
<ChangeType>Cost Center</ChangeType>
<FTE_Snapshot>
<Snapshot>
<Effective_Date>2019-04-01</Effective_Date>
<Class_of_Instance>Position Snapshot</Class_of_Instance>
<Scheduled_Weekly_Hours>40</Scheduled_Weekly_Hours>
<Default_Weekly_Hours>40</Default_Weekly_Hours>
<Snapshot>
</FTE_Snapshot>
</Event>
</EventDetails>
</ChangeEvent>