Мне нужна помощь, чтобы преобразовать данные плоского списка XML в иерархические данные.
Сначала мы читаем входные позиционные данные плоского файла, которые превращаются в преобразование NXSD, которое генерирует плоский список в качестве источника. Эти данные должны быть преобразованы в иерархический режим и отправлены в цель.
Простые циклы for создают иерархию, но генерируют избыточность (считывая все вхождения для каждой итерации).
Я публикую входные и ожидаемые выходные файлы.
Входные данные XML:
<Receive_Amex_GRRCN_Read_InputVariable>
<part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="body">
<Root-Element xmlns="http://TargetNamespace.com/fileService">
<Header>
<FileCreationDate>20191219</FileCreationDate>
<FileCreationTime>060839</FileCreationTime>
<SequentialNumber>0000000059</SequentialNumber>
<FileID>GRRCN</FileID>
<FileName>CompanyName</FileName>
<FileVersion>1.01</FileVersion>
<Filler></Filler>
</Header>
<Summary>
<PayeeMerchantID>2292474327</PayeeMerchantID>
<SettlementAccTypeCode></SettlementAccTypeCode>
<AMEXPayNo>352353A3</AMEXPayNo>
<PayDate>20191220</PayDate>
<PayCur>USD</PayCur>
<UniquePayRefNo>352353A3</UniquePayRefNo>
<SummaryFiller></SummaryFiller>
</Summary>
<Submission>
<PayeeMerchantID>2292474327</PayeeMerchantID>
<SettlementAccountTypeCode></SettlementAccountTypeCode>
<AmexPaymentNo>352353A3</AmexPaymentNo>
<PaymentDate>20191220</PaymentDate>
<SubmissionDebitGrossAMT>000000006674968</SubmissionDebitGrossAMT>
<SubmissionCreditGrossAMT>000000000000000</SubmissionCreditGrossAMT>
<SubmissionFiller></SubmissionFiller>
</Submission>
<Transaction>
<PayeeMerID_TRX>2292474327</PayeeMerID_TRX>
<AccelerationAMT_TRX></AccelerationAMT_TRX>
<Filler2_TRX></Filler2_TRX>
</Transaction>
<TransactionPricing>
<PayMerchantID>2292474327</PayMerchantID>
<DiscountAMT_TRXP>000000000001435118120</DiscountAMT_TRXP>
<TRXPriceFiller3></TRXPriceFiller3>
</TransactionPricing>
<TransactionPricing>
<PayMerchantID>2292474327</PayMerchantID>
<SettlementAccTypeCode></SettlementAccTypeCode>
<DiscountRate_TRXP>-000500</DiscountRate_TRXP>
<DiscountAMT_TRXP>-000000000000333748400</DiscountAMT_TRXP>
<TRXPriceFiller3></TRXPriceFiller3>
</TransactionPricing>
<Submission>
<PayeeMerchantID>2292474327</PayeeMerchantID>
<SettlementAccountTypeCode></SettlementAccountTypeCode>
<SubmissionDebitGrossAMT>000000008035718</SubmissionDebitGrossAMT>
<SubmissionCreditGrossAMT>000000000000000</SubmissionCreditGrossAMT>
<SubmissionFiller></SubmissionFiller>
</Submission>
<Transaction>
<PayeeMerID_TRX>2292474327</PayeeMerID_TRX>
<SettlementAccountType_TRX></SettlementAccountType_TRX>
<TrxAMT_TRX>000000000100000</TrxAMT_TRX>
<TrxDate_TRX>20191217</TrxDate_TRX>
<TrxTime_TRX>000000</TrxTime_TRX>
<TrxID_TRX>007845902071779</TrxID_TRX>
<ApprovalCode_TRX>161001</ApprovalCode_TRX>
<AccelerationAMT_TRX></AccelerationAMT_TRX>
<Filler2_TRX></Filler2_TRX>
</Transaction>
<TransactionPricing>
<PayMerchantID>2292474327</PayMerchantID>
<SettlementAccTypeCode></SettlementAccTypeCode>
<DiscountRate_TRXP>002150</DiscountRate_TRXP>
<DiscountAMT_TRXP>000000000000021500000</DiscountAMT_TRXP>
<TRXPriceFiller3></TRXPriceFiller3>
</TransactionPricing>
<Transaction>
<PayeeMerID_TRX>2292474327</PayeeMerID_TRX>
<ServiceFeeAMT_TRX></ServiceFeeAMT_TRX>
<AccelerationAMT_TRX></AccelerationAMT_TRX>
<Filler2_TRX></Filler2_TRX>
</Transaction>
<TransactionPricing>
<PayMerchantID>2292474327</PayMerchantID>
<SettlementAccTypeCode></SettlementAccTypeCode>
<DiscountRate_TRXP>002150</DiscountRate_TRXP>
<DiscountAMT_TRXP>000000000001684679370</DiscountAMT_TRXP>
<TRXPriceFiller3></TRXPriceFiller3>
</TransactionPricing>
<TransactionPricing>
<PayMerchantID>2292474327</PayMerchantID>
<SettlementAccTypeCode></SettlementAccTypeCode>
<DiscountRate_TRXP>-000500</DiscountRate_TRXP>
<DiscountAMT_TRXP>-000000000000391785900</DiscountAMT_TRXP>
<TRXPriceFiller3></TRXPriceFiller3>
</TransactionPricing>
<Transaction>
<PayeeMerID_TRX>2292474327</PayeeMerID_TRX>
<SettlementAccountType_TRX></SettlementAccountType_TRX>
<AccelerationAMT_TRX></AccelerationAMT_TRX>
<Filler2_TRX></Filler2_TRX>
</Transaction>
<TransactionPricing>
<PayMerchantID>2292474327</PayMerchantID>
<SettlementAccTypeCode></SettlementAccTypeCode>
<AMEXPayNo>352353A3</AMEXPayNo>
<DiscountRate_TRXP>002150</DiscountRate_TRXP>
<DiscountAMT_TRXP>000000000000021500000</DiscountAMT_TRXP>
<TRXPriceFiller3></TRXPriceFiller3>
</TransactionPricing>
<Trailer>
<FileCreationDate>20191219</FileCreationDate>
<FileCreationTime>060839</FileCreationTime>
<SequentialNumber>0000000059</SequentialNumber>
<FileID>GRRCN</FileID>
<FileName>CompanyName</FileName>
<FileVersion>1.01</FileVersion>
<Filler></Filler>
</Trailer>
</Root-Element>
</part>
</Receive_Amex_GRRCN_Read_InputVariable>
Ожидаемый формат выходного файла:
<Header> .. </Header>
<Summary>
<Submission>
<Transaction>
<TransactionPricing>
<TransactionPricing>
<Transaction>
</Submission>
</Summary>
<Trailer> .. </Trailer>
Ожидаемый выходной файл:
<tns:GroupRecord-SUMMARY>
<tns:Record-SUMMARY>
<tns:Field-PAYEE_MERCHANT_ID>2292474327</tns:Field-PAYEE_MERCHANT_ID>
<tns:Field-SETTLEMENT_ACCOUNT_TYPE_CODE></tns:Field-SETTLEMENT_ACCOUNT_TYPE_CODE>
<tns:Field-AMERICAN_EXPRESS_PAYMENT_NUMBER>352A7508</tns:Field-AMERICAN_EXPRESS_PAYMENT_NUMBER>
<tns:Field-BANK_IDENTIFIER_CODE></tns:Field-BANK_IDENTIFIER_CODE>
<tns:Field-SUMMARY_FILLER></tns:Field-SUMMARY_FILLER>
SUMMARY
</tns:Record-SUMMARY>
<tns:GroupRecord-SUBMISSION>
<tns:Record-SUBMISSION>
<tns:Field-SUBMISSION_PAYEE_MERCHANT_ID>2292474327</tns:Field-SUBMISSION_PAYEE_MERCHANT_ID>
<tns:Field-SUB_SETTLEMENT_ACCOUNT_TYPE_CODE></tns:Field-SUB_SETTLEMENT_ACCOUNT_TYPE_CODE>
<tns:Field-SUBMISSION_CREDIT_GROSS_AMOUNT>000000000000000</tns:Field-SUBMISSION_CREDIT_GROSS_AMOUNT>
<tns:Field-SUB_FILLER2></tns:Field-SUB_FILLER2>
SUMMARY
</tns:Record-SUBMISSION>
<tns:GroupRecord-TRANSACTION>
<tns:Record-TRANSACTION>
<tns:Field-TRX_RECORD_TYPE>TRANSACTN</tns:Field-TRX_RECORD_TYPE>
<tns:Field-TRX_PAYEE_MERCHANT_ID>2292474327</tns:Field-TRX_PAYEE_MERCHANT_ID>
<tns:Field-ACCELERATION_AMOUNT></tns:Field-ACCELERATION_AMOUNT>
<tns:Field-TRX_FILLER1></tns:Field-TRX_FILLER1>
</tns:Record-TRANSACTION>
<tns:GroupRecord-TRANSACTION_PRICING>
<tns:Record-TRANSACTION_PRICING>
<tns:Field-TRNX_PAYEE_MERCHANT_ID>2292474327</tns:Field-TRNX_PAYEE_MERCHANT_ID>
<tns:Field-TRNX_SETTLEMENT_ACCOUNT_TYPE_CODE></tns:Field-TRNX_SETTLEMENT_ACCOUNT_TYPE_CODE>
<tns:Field-TRNX_MERCHANT_LOCATION_ID/>
</tns:Record-TRANSACTION_PRICING>
</tns:GroupRecord-TRANSACTION_PRICING>
<tns:GroupRecord-TRANSACTION_PRICING>
<tns:Record-TRANSACTION_PRICING>
<tns:Field-TRNX_PAYEE_MERCHANT_ID>2292474327</tns:Field-TRNX_PAYEE_MERCHANT_ID>
<tns:Field-TRNX_SETTLEMENT_ACCOUNT_TYPE_CODE></tns:Field-TRNX_SETTLEMENT_ACCOUNT_TYPE_CODE>
<tns:Field-TRNX_MERCHANT_LOCATION_ID/>
</tns:Record-TRANSACTION_PRICING>
</tns:GroupRecord-TRANSACTION_PRICING>
</tns:GroupRecord-TRANSACTION>
</tns:GroupRecord-SUBMISSION>
</tns:GroupRecord-SUMMARY>