Превратите плоский список файлов в иерархию или группировку в XSLT 1.0 - PullRequest
0 голосов
/ 21 февраля 2020

Мне нужна помощь, чтобы преобразовать данные плоского списка 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...