Преобразование состоит в следующем: в исходном файле идет заголовок с определенным REFERENCE и затем ноды с этим REFERENCE.
<DT_HEADER_01>
<Trailer>01</Trailer>
<Interface>OTVI</Interface>
<FileId>20130215122238</FileId>
<Companycode>TBA</Companycode>
<DocDate>20130124</DocDate>
<Reference>PIP10000200/101</Reference>
<DocHdr>PIP10000200/101</DocHdr>
<Currency>GBP</Currency>
</DT_HEADER_01>
<DT_VNDRLINE_02>
<Reference>PIP10000200/101</Reference>
<Trailer>02</Trailer>
<Interface>OTVI</Interface>
<FileId>20130215122238</FileId>
<Vendor>TBC</Vendor>
<BaseDate>20130215</BaseDate>
<PayTerms>Z001</PayTerms>
<DocAmt>18.90</DocAmt>
<ItemText>PIP10000200/101</ItemText>
</DT_VNDRLINE_02>
<DT_VNDRBNK_03>
<Reference>PIP10000200/101</Reference>
<Trailer>03</Trailer>
<Interface>OTVI</Interface>
<FileId>20130215122238</FileId>
<Name1>Carl Tuesday</Name1>
<Name2></Name2>
<Name3></Name3>
<Language>E</Language>
<PostalCode>LE10 3EY</PostalCode>
<City>Leeds</City>
<CountryKey>GB</CountryKey>
<Street>16 Long street name truncates here!</Street>
<BnkCountryKey>GB</BnkCountryKey>
<Bankno>200178</Bankno>
<Bankacc>13445566</Bankacc>
<BankCntrl></BankCntrl>
<BankRef></BankRef>
</DT_VNDRBNK_03>
Необходимо вложить ноды в хэдер.
выходная структура :
<DT_HEADER_01>
<Trailer>01</Trailer>
<Interface>OTVI</Interface>
<FileId>20130215122238</FileId>
<Companycode>TBA</Companycode>
<DocDate>20130124</DocDate>
<Reference>PIP10000200/101</Reference>
<DocHdr>PIP10000200/101</DocHdr>
<Currency>GBP</Currency>
</DT_HEADER_01>
<DT_VNDRLINE_02>
<Reference>PIP10000200/101</Reference>
<Trailer>02</Trailer>
<Interface>OTVI</Interface>
<FileId>20130215122238</FileId>
<Vendor>TBC</Vendor>
<BaseDate>20130215</BaseDate>
<PayTerms>Z001</PayTerms>
<DocAmt>18.90</DocAmt>
<ItemText>PIP10000200/101</ItemText>
</DT_VNDRLINE_02>
<DT_VNDRBNK_03>
<Reference>PIP10000200/101</Reference>
<Trailer>03</Trailer>
<Interface>OTVI</Interface>
<FileId>20130215122238</FileId>
<Name1>Carl Tuesday</Name1>
<Name2></Name2>
<Name3></Name3>
<Language>E</Language>
<PostalCode>LE10 3EY</PostalCode>
<City>Leeds</City>
<CountryKey>GB</CountryKey>
<Street>16 Long street name truncates here!</Street>
<BnkCountryKey>GB</BnkCountryKey>
<Bankno>200178</Bankno>
<Bankacc>13445566</Bankacc>
<BankCntrl></BankCntrl>
<BankRef></BankRef>
</DT_VNDRBNK_03>
Необходимо вложить ноды в хэдер.
выходная структура :
<DT_HEADER_01> - invoice 1
<Trailer>01</Trailer>
<Interface>OTVI</Interface>
<FileId>20130215122238</FileId>
<Companycode>TBA</Companycode>
<DocDate>20130124</DocDate>
<Reference>PIP10000200/101</Reference>
<DocHdr>PIP10000200/101</DocHdr>
<Currency>GBP</Currency>
<DT_VNDRLINE_02> - child 1 with same reference
<Reference>PIP10000200/101</Reference>
<Trailer>02</Trailer>
<Interface>OTVI</Interface>
<FileId>20130215122238</FileId>
<Vendor>TBC</Vendor>
<BaseDate>20130215</BaseDate>
<PayTerms>Z001</PayTerms>
<DocAmt>18.90</DocAmt>
<ItemText>PIP10000200/101</ItemText>
</DT_VNDRLINE_02>
<DT_VNDRBNK_03> - child 1 with same reference
<Reference>PIP10000200/101</Reference>
<Trailer>03</Trailer>
<Interface>OTVI</Interface>
<FileId>20130215122238</FileId>
<Name1>Carl Tuesday</Name1>
<Name2></Name2>
<Name3></Name3>
<Language>E</Language>
<PostalCode>LE10 3EY</PostalCode>
<City>Leeds</City>
<CountryKey>GB</CountryKey>
<Street>16 Long street name truncates here!</Street>
<BnkCountryKey>GB</BnkCountryKey>
<Bankno>200178</Bankno>
<Bankacc>13445566</Bankacc>
<BankCntrl></BankCntrl>
<BankRef></BankRef>
</DT_VNDRBNK_03>
</DT_HEADER_01>
Код XSLT:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?xml version="1.0" encoding="ISO-8859-1" ?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="XXXXXXXXXXXXXXXXXXXXXXx"> <xsl:output method="xml" /> <xsl:template match="/"> <ns:MT_FIDCC2_FILE_TO_PI xmlns:ns="XXXXXXXXXXXXXXXXXXXXXXx"> <xsl:copy-of select="//DT_FILEHDR_00"/> <xsl:apply-templates select="//DT_HEADER_01"> </xsl:apply-templates> </ns:MT_FIDCC2_FILE_TO_PI> </xsl:template> <xsl:template match="DT_HEADER_01"> <DT_HEADER_01> <xsl:apply-templates/> <xsl:variable name="ref" > <xsl:value-of select="./Reference"/> </xsl:variable> <xsl:copy-of select="/ns:MT_FIDCC2_FILE_TO_PI/DT_VNDRLINE_02[Reference=$ref]"/> <xsl:copy-of select="/ns:MT_FIDCC2_FILE_TO_PI/DT_VNDRBNK_03[Reference=$ref]"/> <xsl:copy-of select="/ns:MT_FIDCC2_FILE_TO_PI/DT_GLLINE_04[Reference=$ref]"/> </DT_HEADER_01> </xsl:template> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> |
Комментариев нет:
Отправить комментарий