Мне нужно сгруппировать записи на основе OPERATION_CODE.Каждая запись может иметь несколько тегов Allowance в комбинации.Если более одной записи имеют один и тот же код операции, мне нужно все пособие вместе.Я использую xsl 1.0.Используя этот xsl, я получаю только одно пособие на запись (во входных данных для примера, первое пособие в первой записи и первое пособие во второй записи).Ожидаемый результат - это все допуски в первой и второй записи, поскольку код_операции один и тот же.
sample input:
<root xmlns="">
<records>
<record>
<OPERATION_CODE>123456</OPERATION_CODE>
<Combinations>
<allowance>
<WMI_CODE>MR0</WMI_CODE>
<VDS_CODE>1</VDS_CODE>
</allowance>
<allowance>
<WMI_CODE>MR1</WMI_CODE>
<VDS_CODE>2</VDS_CODE>
</allowance>
</Combinations>
</record>
<record>
<OPERATION_CODE>123456</OPERATION_CODE>
<Combinations>
<allowance>
<WMI_CODE>MR2</WMI_CODE>
<VDS_CODE>3</VDS_CODE>
</allowance>
</Combinations>
</record>
</records>
</root>
ожидаемый результат:
<LaborOperationsDetail>
<LaborOperationID>123456</LaborOperationID>
<Combinations>
<Allowance>
<GroupID>MR0</star:GroupID>
<VID>1</star:VID>
</Allowance>
<Allowance>
<GroupID>MR1</star:GroupID>
<VID>2</star:VID>
</Allowance>
<Allowance>
<GroupID>MR2</star:GroupID>
<VID>3</star:VID>
</Allowance>
</Combinations>
<LaborOperationsDetail>
xsl используется:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:key name="opcode" match="record" use="OPERATION_CODE" />
<xsl:template match="root/records">
<xsl:for-each select="record[generate-id() = generate-id(key('opcode', OPERATION_CODE)[1])]">
<LaborOperationsDetail>
<LaborOperationID><xsl:value-of select="OPERATION_CODE"/></LaborOperationID>
<Combinations>
<xsl:for-each select="key('opcode' ,OPERATION_CODE)">
<Allowance>
<GroupID><xsl:value-of select="Combinations/allowance/WMI_CODE" /></GroupID>
<VID><xsl:value-of select="Combinations/allowance/VDS_CODE" /></VID>
</Allowance>
</xsl:for-each >
</Combinations>
</LaborOperationsDetail>
</xsl:for-each >
</xsl:template>
</xsl:stylesheet>