У меня ниже xml ввода и я хочу преобразовать его в один элемент, пожалуйста, пройдите ввод и ожидаемый вывод и предоставьте любое решение.требуется XSLT 1.0
, входной xml как указано ниже
`<?xml version="1.0" encoding="UTF-8"?>
<Data>
<PrintableDocument>
<SubjectData>
<SubjectIND AECBBureauHitResponseStatus="Hit" AECBConsentFlag="0" AECBInquiryFlag="0"
Age="26" CHMCallDone="" CHMConsentFlag="0" CHMInquiryFlag="0" DOB="1993-08-04"
EmiratesID="784-1993-5878784-1" FullName="ROSS GIULI" Gender="F" Name="ROSS"
Nationality="UAE" PdtDone="0" Role="M" Surname="GIULI">
<ExternalSources>
<UAEbureau AECBBureauHitResponseStatus="Hit" AECBConsentFlag="0"
AECBInquiryFlag="0" Age="26" CHMCallDone="" CHMConsentFlag="0"
CHMInquiryFlag="0" DOB="1993-08-04" EmiratesID="784-1993-5878784-1"
FullName="ROSS GIULI" Gender="F" Name="ROSS" Nationality="UAE" PdtDone="0"
Role="M" Surname="GIULI">
<Contracts>
<Contract TotalAmount="12000" >
<History Year="2018">
<Period ReferenceDate="012018" Balance="444"
OverdueAmount="200" DaysPaymentDelay="8" ContractStatus="U"></Period>
<Period ReferenceDate="012018" Balance="885000"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
<Period ReferenceDate="022018" Balance="885000"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
</History>
<History Year="2017">
<Period ReferenceDate="022017" Balance="25000"
OverdueAmount="50" DaysPaymentDelay="0" ContractStatus="U"></Period>
<Period ReferenceDate="022017" Balance="777" OverdueAmount="50"
DaysPaymentDelay="1" ContractStatus="U"></Period>
</History>
</Contract>
<Contract TotalAmount="12000" >
<History Year="2018">
<Period ReferenceDate="012017" Balance="222"
OverdueAmount="200" DaysPaymentDelay="8" ContractStatus="U"></Period>
<Period ReferenceDate="012017" Balance="123"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
<Period ReferenceDate="022017" Balance="8987"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
</History>
<History Year="2017">
<Period ReferenceDate="022018" Balance="121"
OverdueAmount="50" DaysPaymentDelay="0" ContractStatus="U"></Period>
<Period ReferenceDate="022018" Balance="2311" OverdueAmount="50"
DaysPaymentDelay="1" ContractStatus="U"></Period>
</History>
</Contract>
</Contracts>
</UAEbureau>
</ExternalSources>
</SubjectIND>
</SubjectData>
</PrintableDocument>
</Data>
`
ожидаемый результат будет как ниже
`<?xml version="1.0" encoding="UTF-8"?>
<Data>
<PrintableDocument>
<SubjectData>
<SubjectIND AECBBureauHitResponseStatus="Hit" AECBConsentFlag="0" AECBInquiryFlag="0"
Age="26" CHMCallDone="" CHMConsentFlag="0" CHMInquiryFlag="0" DOB="1993-08-04"
EmiratesID="784-1993-5878784-1" FullName="ROSS GIULI" Gender="F" Name="ROSS"
Nationality="UAE" PdtDone="0" Role="M" Surname="GIULI">
<ExternalSources>
<UAEbureau AECBBureauHitResponseStatus="Hit" AECBConsentFlag="0"
AECBInquiryFlag="0" Age="26" CHMCallDone="" CHMConsentFlag="0"
CHMInquiryFlag="0" DOB="1993-08-04" EmiratesID="784-1993-5878784-1"
FullName="ROSS GIULI" Gender="F" Name="ROSS" Nationality="UAE" PdtDone="0"
Role="M" Surname="GIULI">
<Contracts>
<Contract TotalAmount="12000" >
<History Year="2018">
<Period ReferenceDate="012018" Balance="444"
OverdueAmount="200" DaysPaymentDelay="8" ContractStatus="U"></Period>
<Period ReferenceDate="012018" Balance="885000"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
<Period ReferenceDate="022018" Balance="885000"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
</History>
<History Year="2017">
<Period ReferenceDate="022018" Balance="25000"
OverdueAmount="50" DaysPaymentDelay="0" ContractStatus="U"></Period>
<Period ReferenceDate="022018" Balance="777" OverdueAmount="50"
DaysPaymentDelay="1" ContractStatus="U"></Period>
</History>
</Contract>
<Contract TotalAmount="12000" >
<History Year="2018">
<Period ReferenceDate="012018" Balance="222"
OverdueAmount="200" DaysPaymentDelay="8" ContractStatus="U"></Period>
<Period ReferenceDate="012018" Balance="123"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
<Period ReferenceDate="022018" Balance="8987"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
</History>
<History Year="2017">
<Period ReferenceDate="022018" Balance="121"
OverdueAmount="50" DaysPaymentDelay="0" ContractStatus="U"></Period>
<Period ReferenceDate="022018" Balance="2311" OverdueAmount="50"
DaysPaymentDelay="1" ContractStatus="U"></Period>
</History>
</Contract>
</Contracts>
<ConsolidatedHistory>
<History Year="2018">
<Period ReferenceDate="012018" Balance="444"
OverdueAmount="200" DaysPaymentDelay="8" ContractStatus="U"></Period>
<Period ReferenceDate="012018" Balance="885000"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
<Period ReferenceDate="022018" Balance="885000"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
<Period ReferenceDate="012018" Balance="222"
OverdueAmount="200" DaysPaymentDelay="8" ContractStatus="U"></Period>
<Period ReferenceDate="012018" Balance="123"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
<Period ReferenceDate="022018" Balance="8987"
OverdueAmount="100" DaysPaymentDelay="1" ContractStatus="U"></Period>
</History>
<History Year="2017">
<Period ReferenceDate="022017" Balance="25000"
OverdueAmount="50" DaysPaymentDelay="0" ContractStatus="U"></Period>
<Period ReferenceDate="022017" Balance="777" OverdueAmount="50"
DaysPaymentDelay="1" ContractStatus="U"></Period>
<Period ReferenceDate="022017" Balance="121"
OverdueAmount="50" DaysPaymentDelay="0" ContractStatus="U"></Period>
<Period ReferenceDate="022017" Balance="2311" OverdueAmount="50"
DaysPaymentDelay="1" ContractStatus="U"></Period>
</History>
</ConsolidatedHistory>
</UAEbureau>
</ExternalSources>
</SubjectIND>
</SubjectData>
</PrintableDocument>
</Data>
`
пример кода xslt
`<?xml version="1.0" encoding="utf-16"?>
<xsl:stylesheet xmlns:xalan="http://xml.apache.org/xalan" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="Data">
<xsl:element name="Data">
<xsl:call-template name="SubjectData" />
</xsl:element>
</xsl:template>
<xsl:template name="SubjectData">
<xsl:element name="SubjectData">
<xsl:for-each select="SubjectData/SubjectIND">
<xsl:element name="SubjectIND">
<xsl:copy-of select="@*"/>
<xsl:copy-of select="*[name()!='ExternalSources']" />
<xsl:element name="ExternalSources">
<xsl:element name="UAEbureau">
<xsl:copy-of select="ExternalSources/UAEbureau/@*"/>
<xsl:copy-of select="*[name()!='Contracts']" />
<xsl:element name="Contracts">
<xsl:for-each select="ExternalSources/UAEbureau/Contracts/Contract">
<xsl:element name="Contract">
<xsl:copy-of select="@*"/>
<xsl:copy-of select="CommonInfo"/>
<xsl:for-each select="History">
<xsl:sort select="@Year" order="descending"/>
<xsl:variable name="key" select="@Year"/>
<xsl:if test="not(preceding-sibling::History[@Year=$key])">
<xsl:element name="History">
<xsl:attribute name="Year"><xsl:value-of select="@Year"/></xsl:attribute>
<xsl:for-each select="../History[@Year=$key]">
<xsl:element name="Period">
<xsl:attribute name="ReferenceDate"><xsl:value-of select="@ReferenceDate"/></xsl:attribute>
<xsl:attribute name="Balance"><xsl:value-of select="@Balance"/></xsl:attribute>
<xsl:attribute name="OverdueAmount"><xsl:value-of select="@OverdueAmount"/></xsl:attribute>
<xsl:attribute name="DaysPaymentDelay"><xsl:value-of select="@DaysPaymentDelay"/></xsl:attribute>
<xsl:attribute name="ContractStatus"><xsl:value-of select="@ContractStatus"/></xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>`
здесь Контракт будет 1 ко многим, а История контракта также зависит от года.Пожалуйста, предложите любой подход к следующей ситуации.