Это немного сложно, и я действительно не сейчас, если это возможно.
Я получил этот XML:
<XML>
<member>
<InicialAmount>10000000</InitialAmount>
<Flows>
<Payment>
<Date>20100621</Date>
<Period>
<Amount>10000000</Amount>
<StartDate>20100521</StartDate>
<EndDate>20100621</EndDate>
<contribution>
<contributionFlow>
<Amount>10000000</Amount>
<StartDate>20100521</StartDate>
<EndDate>20100621</EndDate>
</contributionFlow>
</contribution>
</Period>
</Payment>
<Payment>
<Date>20100823</Date>
<Period>
<Amount>9000000</Amount>
<StartDate>20100621</StartDate>
<EndDate>20100921</EndDate>
<contribution>
<contributionFlow>
<Amount>9000000</Amount>
<StartDate>20100621</StartDate>
<EndDate>20100721</EndDate>
</contributionFlow>
<contributionFlow>
<Amount>8000000</Amount>
<StartDate>20100721</StartDate>
<EndDate>20100823</EndDate>
</contributionFlow>
</contribution>
</Period>
</Payment>
</Flows>
</member>
И мне нужно сделать преобразование (или более одного, если необходимо), которое даст мне следующее:
<XML>
<Flows>
<Flow>
<PaymentDate>20100621</PaymentDate>
<StartDate>20100521</StartDate>
<EndDate>20100621</EndDate>
<EventType>C</EventType>
</Flow>
<Flow>
<PaymentDate>20100823</PaymentDate>
<StartDate>20100621</StartDate>
<EndDate>20100721</EndDate>
<EventType>A</EventType>
<AmortizationPercent>10.0</AmortizationPercent>
</Flow>
<Flow>
<PaymentDate>20100823</PaymentDate>
<StartDate>20100721</StartDate>
<EndDate>20100823</EndDate>
<EventType>A</EventType>
<AmortizationPercent>10.0</AmortizationPercent>
</Flow>
</Flows>
Это возможно?
Мне нужно отсортировать каждый <contributionFlow>
(который впоследствии будет переименован в <Flow>
) в одну из двух категорий в соответствии с критериями.
Не просто сортировка, на самом деле, мне нужно внести изменения в макет, удалив поле (<Amount>
) и скопировав другое из родительского узла (<Date>
из <Payment>
, которое должно вызвать <PaymentDate>
в новый).
Кроме того, мне нужно создать поле <EventType>
, которое должно быть заполнено информацией, основанной на категории, в которую помещается <contributionFlow>
.
Но чтобы выяснить, в какой категории находится узел, мне нужно сделать расчет.
Мне нужно проверить и посмотреть, отличается ли поле <Amount>
от того же поля, что и поле <contributionFlow>
до этого (во-первых, если поле отличается от поля <InicialAmount>
). Если это так, <EventType>
должен быть заполнен буквой A, если нет - C.
Более того, если <EventType>
окажется A, необходимо выполнить расчет для заполнения узла <AmortizationPercent>
.
Значение в <AmortizationPercent>
определяется как разница между <Amount>
значением предыдущего и текущего <contributionFlow>
, деленная на <InicialAmount>
, все это время 100.0.
Я действительно даже не знаю, возможно ли это в XSLT-преобразовании, но на данный момент это единственный способ, которым я могу заставить свою систему делать такие вещи, и это то, что мне нужно сделать. Я только начинаю изучать XSLT, поэтому мне трудно найти решения для себя.