Предполагая, что:
- вы можете использовать XSLT 2.0,
- вывод должен содержать отдельную строку для каждого
Effective_Moment
(часть даты), для каждого сотрудника,
вы можете выполнить задачу следующим образом:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:peci="urn:com.w/peci" xpath-default-namespace="urn:com.w/peci">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="Workers_Effective_Stack">
<xsl:for-each-group select="Worker/Effective_Change" group-by=
"concat(../Worker_Summary/Employee_ID, substring(Effective_Moment,1,10))">
<xsl:value-of select="../Worker_Summary/Employee_ID"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="substring(Effective_Moment, 1, 10)"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="Worker_Status/Status"/>
<xsl:text>
</xsl:text>
</xsl:for-each-group>
</xsl:template>
</xsl:transform>
Внимание: ваш исходный XML имеет один несбалансированный peci:Worker
открывающий тег, я удалил их.
Примечание:Группировать можно только по дате вступления в силу, но я думаю, что это не то, что вы хотите.Если ваш вклад содержал ряд эффективных изменений для разных сотрудников, но в одну и ту же дату вступления в силу, то выходные данные содержали бы только одну запись из этой группы.Вот почему я выполнил группировку с использованием составного ключа, включая также идентификатор сотрудника.